Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4854a5f0 authored by Eric Sandeen's avatar Eric Sandeen Committed by Jan Kara
Browse files

ext3: ext3_mark_recovery_complete() doesn't need to use lock_super



The function ext3_mark_recovery_complete() is called from two call
paths: either (a) while mounting the filesystem, in which case there's
no danger of any other CPU calling write_super() until the mount is
completed, and (b) while remounting the filesystem read-write, in
which case the fs core has already locked the superblock.  This also
allows us to take out a very vile unlock_super()/lock_super() pair in
ext3_remount().

Port of ext4 commit a63c9eb2 by
Theodore Ts'o <tytso@mit.edu>.

CC: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent ed505ee4
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -2396,13 +2396,11 @@ static void ext3_mark_recovery_complete(struct super_block * sb,
	if (journal_flush(journal) < 0)
		goto out;

	lock_super(sb);
	if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER) &&
	    sb->s_flags & MS_RDONLY) {
		EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
		ext3_commit_super(sb, es, 1);
	}
	unlock_super(sb);

out:
	journal_unlock_updates(journal);
@@ -2594,13 +2592,7 @@ static int ext3_remount (struct super_block * sb, int * flags, char * data)
			    (sbi->s_mount_state & EXT3_VALID_FS))
				es->s_state = cpu_to_le16(sbi->s_mount_state);

			/*
			 * We have to unlock super so that we can wait for
			 * transactions.
			 */
			unlock_super(sb);
			ext3_mark_recovery_complete(sb, es);
			lock_super(sb);
		} else {
			__le32 ret;
			if ((ret = EXT3_HAS_RO_COMPAT_FEATURE(sb,