[PATCH] mutex subsystem, semaphore to mutex: VFS, sb->s_lock
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>
This commit is contained in:
@@ -2150,7 +2150,7 @@ int ext3_force_commit(struct super_block *sb)
|
|||||||
|
|
||||||
static void ext3_write_super (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();
|
BUG();
|
||||||
sb->s_dirt = 0;
|
sb->s_dirt = 0;
|
||||||
}
|
}
|
||||||
|
@@ -169,7 +169,7 @@ static match_table_t tokens = {
|
|||||||
*/
|
*/
|
||||||
static void ocfs2_write_super(struct super_block *sb)
|
static void ocfs2_write_super(struct super_block *sb)
|
||||||
{
|
{
|
||||||
if (down_trylock(&sb->s_lock) == 0)
|
if (mutex_trylock(&sb->s_lock) != 0)
|
||||||
BUG();
|
BUG();
|
||||||
sb->s_dirt = 0;
|
sb->s_dirt = 0;
|
||||||
}
|
}
|
||||||
|
@@ -72,7 +72,7 @@ static struct super_block *alloc_super(void)
|
|||||||
INIT_HLIST_HEAD(&s->s_anon);
|
INIT_HLIST_HEAD(&s->s_anon);
|
||||||
INIT_LIST_HEAD(&s->s_inodes);
|
INIT_LIST_HEAD(&s->s_inodes);
|
||||||
init_rwsem(&s->s_umount);
|
init_rwsem(&s->s_umount);
|
||||||
sema_init(&s->s_lock, 1);
|
mutex_init(&s->s_lock);
|
||||||
down_write(&s->s_umount);
|
down_write(&s->s_umount);
|
||||||
s->s_count = S_BIAS;
|
s->s_count = S_BIAS;
|
||||||
atomic_set(&s->s_active, 1);
|
atomic_set(&s->s_active, 1);
|
||||||
|
@@ -821,7 +821,7 @@ struct super_block {
|
|||||||
unsigned long s_magic;
|
unsigned long s_magic;
|
||||||
struct dentry *s_root;
|
struct dentry *s_root;
|
||||||
struct rw_semaphore s_umount;
|
struct rw_semaphore s_umount;
|
||||||
struct semaphore s_lock;
|
struct mutex s_lock;
|
||||||
int s_count;
|
int s_count;
|
||||||
int s_syncing;
|
int s_syncing;
|
||||||
int s_need_sync_fs;
|
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)
|
static inline void lock_super(struct super_block * sb)
|
||||||
{
|
{
|
||||||
get_fs_excl();
|
get_fs_excl();
|
||||||
down(&sb->s_lock);
|
mutex_lock(&sb->s_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void unlock_super(struct super_block * sb)
|
static inline void unlock_super(struct super_block * sb)
|
||||||
{
|
{
|
||||||
put_fs_excl();
|
put_fs_excl();
|
||||||
up(&sb->s_lock);
|
mutex_unlock(&sb->s_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user