[Ocfs2-tools-devel] [PATCH] Improvement to tunefs.ocfs2 online resize to handle symbolic link

Jiaju Zhang jjzhang.linux at gmail.com
Thu Mar 11 07:06:01 PST 2010


Hi Tao,

On Thu, Mar 11, 2010 at 10:18 PM, Tao Ma <tao.ma at oracle.com> wrote:
> Hi jiaju,
> Jiaju Zhang wrote:
>>
>> Hi,
>>
>> This is a simple patch which fix the issue that tunefs.ocfs2 online
>> resize can't handle symbolic link of a device file. For example, in
>> the LVM using scenario, '/dev/vg1/lv1' and '/dev/mapper/vg1-lv1' are
>> the same device, '/dev/vg1/lv1' is just a symbolic link to
>> '/dev/mapper/vg1-lv1'. But if we try to do online resize like
>> 'tunefs.ocfs2 -S /dev/vg1/lv1', it fails.
>>
>> Any review and comments are highly appreciated!
>>
>
>   you said you fixed the bug in tunefs.ocfs2, but the patch is in
> ocfs2_controld/mount.c? You send the wrong patch?

No, just this patch :-) My environment is ocfs2 with user-space
cluster stack enabled. This issue happens only in online resize
scenario because online resize will call 'ocfs2_initialize_dlm', in
which the operation joining mountgroup (user_begin_group_join) is
called.

It is in ocfs2_controld/mount.c is because mount.c not only handles
what the 'mount' operation should do but also all the operations
related to mountgroup, others like mkfs.ocfs2, fsck.ocfs2,
tunefs.ocfs2 are all one type of service in mountgroup.

This bug just happens when tunefs.ocfs2 wants to join the mountgroup.

Thanks,
Jiaju

>
> Regards,
> Tao
>>
>> Thanks a lot,
>> Jiaju
>>
>> Signed-off-by: Jiaju Zhang <jjzhang.linux at gmail.com>
>> ---
>>  ocfs2_controld/mount.c |    4 +++-
>>  1 files changed, 3 insertions(+), 1 deletions(-)
>>
>> diff --git a/ocfs2_controld/mount.c b/ocfs2_controld/mount.c
>> index 36459d1..076f727 100644
>> --- a/ocfs2_controld/mount.c
>> +++ b/ocfs2_controld/mount.c
>> @@ -260,11 +260,13 @@ static void add_service(struct mountgroup *mg, const
>> char *device,
>>                           const char *service, int ci, int fd)
>>  {
>>        struct service *ms;
>> +       struct stat st1, st2;
>>        log_debug("Adding service %s to device %s uuid %s",
>>                  service, device, mg->mg_uuid);
>>  -      if (strcmp(mg->mg_device, device)) {
>> +       if (!stat(mg->mg_device, &st1) && !stat(device, &st2)
>> +           && st1.st_rdev != st2.st_rdev) {
>>                fill_error(mg, EINVAL,
>>                           "Trying to mount fs %s on device %s, but it is
>> already mounted from device %s",
>>                           mg->mg_uuid, device, mg->mg_device);
>>
>> _______________________________________________
>> Ocfs2-tools-devel mailing list
>> Ocfs2-tools-devel at oss.oracle.com
>> http://oss.oracle.com/mailman/listinfo/ocfs2-tools-devel
>>
>
>



More information about the Ocfs2-tools-devel mailing list