Asbjørn Sannes wrote:
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..
Actually, it didn't enjoy unmount as much ..
Mvh,
Asbjørn Sannes
Hi Asbjørn,
I took them out because I noticed the problem with umount and I knew that
the HEAD version didn't do it. Of course, that's because it doesn't have a
diaper device whereas STABLE still does. I've just got to spend a
little time
with it, that's all. It's probably something simple.
Regards,
Bob Peterson
Red Hat Cluster Suite
--
Linux-cluster mailing list
Linux-cluster@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/linux-cluster