From: Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx> The VFS's 'lock_super()' and 'unlock_super()' calls are deprecated and unwanted and just wait for a brave knight who'd kill them. This patch makes AFFS stop using them and introduces own AFFS superblock mutex which we use for serializeing the root block changes. Signed-off-by: Artem Bityutskiy <artem.bityutskiy@xxxxxxxxxxxxxxx> --- fs/affs/affs.h | 1 + fs/affs/super.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/affs/affs.h b/fs/affs/affs.h index 45a0ce4..b8af745 100644 --- a/fs/affs/affs.h +++ b/fs/affs/affs.h @@ -108,6 +108,7 @@ struct affs_sb_info { char *s_prefix; /* Prefix for volumes and assigns. */ char s_volume[32]; /* Volume prefix for absolute symlinks. */ spinlock_t symlink_lock; /* protects the previous two */ + struct mutex s_lock; /* protects the SB's buffer-head */ }; #define SF_INTL 0x0001 /* International filesystem. */ diff --git a/fs/affs/super.c b/fs/affs/super.c index 8293cb9..8674915 100644 --- a/fs/affs/super.c +++ b/fs/affs/super.c @@ -31,14 +31,14 @@ affs_commit_super(struct super_block *sb, int wait) struct buffer_head *bh = sbi->s_root_bh; struct affs_root_tail *tail = AFFS_ROOT_TAIL(sb, bh); - lock_super(sb); + mutex_lock(&sbi->s_lock); tail->bm_flag = cpu_to_be32(2); secs_to_datestamp(get_seconds(), &tail->disk_change); affs_fix_checksum(sb, bh); mark_buffer_dirty(bh); if (wait) sync_dirty_buffer(bh); - unlock_super(sb); + mutex_unlock(&sbi->s_lock); } static void @@ -299,6 +299,7 @@ static int affs_fill_super(struct super_block *sb, void *data, int silent) return -ENOMEM; sb->s_fs_info = sbi; + mutex_init(&sbi->s_lock); mutex_init(&sbi->s_bmlock); spin_lock_init(&sbi->symlink_lock); -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html