ext2: Remove s_dirt handling
authorJan Kara <jack@suse.cz>
Sat, 31 Mar 2012 12:22:10 +0000 (14:22 +0200)
committerJan Kara <jack@suse.cz>
Wed, 11 Apr 2012 09:12:45 +0000 (11:12 +0200)
Places which modify superblock feature / state fields mark the superblock
buffer dirty so it is written out by flusher thread. Thus there's no need to
set s_dirt there.

The only other fields changing in the superblock are the numbers of free
blocks, free inodes and s_wtime. There's no real need to write (or even
compute) these periodically. Free blocks / inodes counters are recomputed on
every mount from group counters anyway and value of s_wtime is only
informational and imprecise anyway. So it should be enough to write these
opportunistically on mount, remount, umount, and sync_fs times.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext2/balloc.c
fs/ext2/ialloc.c
fs/ext2/super.c
fs/ext2/xattr.c

index a8cbe1b..a9bba1e 100644 (file)
@@ -165,7 +165,6 @@ static void release_blocks(struct super_block *sb, int count)
                struct ext2_sb_info *sbi = EXT2_SB(sb);
 
                percpu_counter_add(&sbi->s_freeblocks_counter, count);
-               sb->s_dirt = 1;
        }
 }
 
@@ -180,7 +179,6 @@ static void group_adjust_blocks(struct super_block *sb, int group_no,
                free_blocks = le16_to_cpu(desc->bg_free_blocks_count);
                desc->bg_free_blocks_count = cpu_to_le16(free_blocks + count);
                spin_unlock(sb_bgl_lock(sbi, group_no));
-               sb->s_dirt = 1;
                mark_buffer_dirty(bh);
        }
 }
index 8b15cf8..c13eb7b 100644 (file)
@@ -81,7 +81,6 @@ static void ext2_release_inode(struct super_block *sb, int group, int dir)
        spin_unlock(sb_bgl_lock(EXT2_SB(sb), group));
        if (dir)
                percpu_counter_dec(&EXT2_SB(sb)->s_dirs_counter);
-       sb->s_dirt = 1;
        mark_buffer_dirty(bh);
 }
 
@@ -543,7 +542,6 @@ got:
        }
        spin_unlock(sb_bgl_lock(sbi, group));
 
-       sb->s_dirt = 1;
        mark_buffer_dirty(bh2);
        if (test_opt(sb, GRPID)) {
                inode->i_mode = mode;
index 12a7916..a43f9ad 100644 (file)
@@ -1158,7 +1158,6 @@ static void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es,
        mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
        if (wait)
                sync_dirty_buffer(EXT2_SB(sb)->s_sbh);
-       sb->s_dirt = 0;
 }
 
 /*
@@ -1191,8 +1190,6 @@ void ext2_write_super(struct super_block *sb)
 {
        if (!(sb->s_flags & MS_RDONLY))
                ext2_sync_fs(sb, 1);
-       else
-               sb->s_dirt = 0;
 }
 
 static int ext2_remount (struct super_block * sb, int * flags, char * data)
index 6dcafc7..b6754db 100644 (file)
@@ -339,7 +339,6 @@ static void ext2_xattr_update_super_block(struct super_block *sb)
        spin_lock(&EXT2_SB(sb)->s_lock);
        EXT2_SET_COMPAT_FEATURE(sb, EXT2_FEATURE_COMPAT_EXT_ATTR);
        spin_unlock(&EXT2_SB(sb)->s_lock);
-       sb->s_dirt = 1;
        mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
 }