[PATCH] mutex subsystem, semaphore to mutex: VFS, sb->s_lock
authorIngo Molnar <mingo@elte.hu>
Mon, 9 Jan 2006 23:59:25 +0000 (15:59 -0800)
committerIngo Molnar <mingo@hera.kernel.org>
Mon, 9 Jan 2006 23:59:25 +0000 (15:59 -0800)
This patch converts the superblock-lock semaphore to a mutex, affecting
lock_super()/unlock_super(). Tested on ext3 and XFS.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
fs/ext3/super.c
fs/ocfs2/super.c
fs/super.c
include/linux/fs.h

index c3dbebd..56bf765 100644 (file)
@@ -2150,7 +2150,7 @@ int ext3_force_commit(struct super_block *sb)
 
 static void ext3_write_super (struct super_block * sb)
 {
-       if (down_trylock(&sb->s_lock) == 0)
+       if (mutex_trylock(&sb->s_lock) != 0)
                BUG();
        sb->s_dirt = 0;
 }
index 48bf7f0..364d64b 100644 (file)
@@ -169,7 +169,7 @@ static match_table_t tokens = {
  */
 static void ocfs2_write_super(struct super_block *sb)
 {
-       if (down_trylock(&sb->s_lock) == 0)
+       if (mutex_trylock(&sb->s_lock) != 0)
                BUG();
        sb->s_dirt = 0;
 }
index 0a30e51..c177b92 100644 (file)
@@ -72,7 +72,7 @@ static struct super_block *alloc_super(void)
                INIT_HLIST_HEAD(&s->s_anon);
                INIT_LIST_HEAD(&s->s_inodes);
                init_rwsem(&s->s_umount);
-               sema_init(&s->s_lock, 1);
+               mutex_init(&s->s_lock);
                down_write(&s->s_umount);
                s->s_count = S_BIAS;
                atomic_set(&s->s_active, 1);
index 01654b2..92ae3e2 100644 (file)
@@ -821,7 +821,7 @@ struct super_block {
        unsigned long           s_magic;
        struct dentry           *s_root;
        struct rw_semaphore     s_umount;
-       struct semaphore        s_lock;
+       struct mutex            s_lock;
        int                     s_count;
        int                     s_syncing;
        int                     s_need_sync_fs;
@@ -893,13 +893,13 @@ static inline int has_fs_excl(void)
 static inline void lock_super(struct super_block * sb)
 {
        get_fs_excl();
-       down(&sb->s_lock);
+       mutex_lock(&sb->s_lock);
 }
 
 static inline void unlock_super(struct super_block * sb)
 {
        put_fs_excl();
-       up(&sb->s_lock);
+       mutex_unlock(&sb->s_lock);
 }
 
 /*