diff options
author | Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | 2012-03-21 22:29:15 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2012-03-21 22:29:15 -0400 |
commit | a8e25a83245618e6b0ddf82a9bba79c1b466804d (patch) | |
tree | 0bcdefe7f23b4fba9a9b20e02cec08d0550de316 | |
parent | 1b8b9750f07cdd6e13f12c06ae7ec853f2abbe6c (diff) | |
download | op-kernel-dev-a8e25a83245618e6b0ddf82a9bba79c1b466804d.zip op-kernel-dev-a8e25a83245618e6b0ddf82a9bba79c1b466804d.tar.gz |
ext4: write superblock only once on unmount
In some rather rare cases it is possible that ext4 may the superblock
to the media twice. This patch makes sure this does not happen. This
should speed up unmounting in those cases.
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
-rw-r--r-- | fs/ext4/super.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 1e26f4a..626c1f8 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -836,9 +836,6 @@ static void ext4_put_super(struct super_block *sb) destroy_workqueue(sbi->dio_unwritten_wq); lock_super(sb); - if (sb->s_dirt) - ext4_commit_super(sb, 1); - if (sbi->s_journal) { err = jbd2_journal_destroy(sbi->s_journal); sbi->s_journal = NULL; @@ -855,8 +852,10 @@ static void ext4_put_super(struct super_block *sb) if (!(sb->s_flags & MS_RDONLY)) { EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER); es->s_state = cpu_to_le16(sbi->s_mount_state); - ext4_commit_super(sb, 1); } + if (sb->s_dirt || !(sb->s_flags & MS_RDONLY)) + ext4_commit_super(sb, 1); + if (sbi->s_proc) { remove_proc_entry("options", sbi->s_proc); remove_proc_entry(sb->s_id, ext4_proc_root); |