[Linux-cluster] gfs1 and 2.6.20
Asbjørn Sannes
ace at sannes.org
Thu Feb 22 14:33:22 UTC 2007
Robert Peterson wrote:
> Asbjørn Sannes wrote:
>> Asbjørn Sannes wrote:
>>
>>> I have been trying to use the STABLE branch of the cluster suite with
>>> vanilla 2.6.20 kernel, and everything seemed at first to work, my
>>> problem can be reproduced by this:
>>>
>>> mount a gfs filesystem anywhere..
>>> do a sync, this sync will now just hang there ..
>>>
>>> If I unmount the filesystem in another terminal, the sync command will
>>> end..
>>>
>>> .. dumping the kernel stack of sync shows that it is in
>>> __sync_inodes on
>>> __down_read, looking in the code it seems that is waiting for the
>>> s_umount semaphore (in the superblock)..
>>>
>>> Just tell me if you need any more information or if this is not the
>>> correct place for this..
>>>
>> Here is the trace for sync (while hanging) ..
>>
>> sync D ffffffff8062eb80 0 17843
>> 15013 (NOTLB)
>> ffff810071689e98 0000000000000082 ffff810071689eb8 ffffffff8024d210
>> 0000000071689e18 0000000000000000 0000000100000000 ffff81007b670fe0
>> ffff81007b6711b8 00000000000004c8 ffff810037c84770 0000000000000001
>> Call Trace:
>> [<ffffffff8024d210>] wait_on_page_writeback_range+0xed/0x140
>> [<ffffffff8046046c>] __down_read+0x90/0xaa
>> [<ffffffff802407d6>] down_read+0x16/0x1a
>> [<ffffffff8028df35>] __sync_inodes+0x5f/0xbb
>> [<ffffffff8028dfa7>] sync_inodes+0x16/0x2f
>> [<ffffffff80290293>] do_sync+0x17/0x60
>> [<ffffffff802902ea>] sys_sync+0xe/0x12
>> [<ffffffff802098be>] system_call+0x7e/0x83
>>
>> Greetings,
>> Asbjørn Sannes
>>
> Hi Asbjørn,
>
> I'll look into this as soon as I can find the time...
>
Great! I tried to figure out why the s_umount semaphore was not upped by
comparing to other filesystems, but the functions seems almost identical
.. so I cheated and looked what had changed lately (from your patch):
diff -w -u -p -p -u -r1.1.2.1.4.1.2.1 diaper.c
--- gfs-kernel/src/gfs/diaper.c 26 Jun 2006 21:53:51 -0000 1.1.2.1.4.1.2.1
+++ gfs-kernel/src/gfs/diaper.c 2 Feb 2007 22:28:41 -0000
@@ -50,7 +50,7 @@ static int diaper_major = 0;
static LIST_HEAD(diaper_list);
static spinlock_t diaper_lock;
static DEFINE_IDR(diaper_idr);
-kmem_cache_t *diaper_slab;
+struct kmem_cache *diaper_slab;
/**
* diaper_open -
@@ -232,9 +232,9 @@ get_dummy_sb(struct diaper_holder *dh)
struct inode *inode;
int error;
- mutex_lock(&real->bd_mount_mutex);
+ down(&real->bd_mount_sem);
sb = sget(&gfs_fs_type, gfs_test_bdev_super, gfs_set_bdev_super, real);
- mutex_unlock(&real->bd_mount_mutex);
+ up(&real->bd_mount_sem);
if (IS_ERR(sb))
return PTR_ERR(sb);
@@ -252,7 +252,6 @@ get_dummy_sb(struct diaper_holder *dh)
sb->s_op = &gfs_dummy_sops;
sb->s_fs_info = dh;
- up_write(&sb->s_umount);
module_put(gfs_fs_type.owner);
dh->dh_dummy_sb = sb;
@@ -263,7 +262,6 @@ get_dummy_sb(struct diaper_holder *dh)
iput(inode);
fail:
- up_write(&sb->s_umount);
deactivate_super(sb);
return error;
}
And undid those up_write ones (added them back in), which helped, I
don't know if it safe though, and maybe you could shed some lights on
why they were removed? (I didn't find any changes that would do up_write
on s_umount later..
> Regards,
>
> Bob Peterson
> Red Hat Cluster Suite
>
> --
> Linux-cluster mailing list
> Linux-cluster at redhat.com
> https://www.redhat.com/mailman/listinfo/linux-cluster
>
Mvh,
Asbjørn Sannes
More information about the Linux-cluster
mailing list