aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/super.c
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2009-02-28 19:39:58 -0500
committerTheodore Ts'o <tytso@mit.edu>2009-02-28 19:39:58 -0500
commitafc32f7ee9febc020c73da61402351d4c90437f3 (patch)
tree7b78aaaac87eb704074f6ece996b2c78a69fbe18 /fs/ext4/super.c
parentd6014301b5599fba395c42a1e96a7fe86f7d0b2d (diff)
ext4: Track lifetime disk writes
Add a new superblock value which tracks the lifetime amount of writes to the filesystem. This is useful in estimating the amount of wear on solid state drives (SSD's) caused by writes to the filesystem. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r--fs/ext4/super.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index a3768709ce05..30fc27cdf8fc 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2035,6 +2035,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
2035 sbi->s_resgid = EXT4_DEF_RESGID; 2035 sbi->s_resgid = EXT4_DEF_RESGID;
2036 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS; 2036 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
2037 sbi->s_sb_block = sb_block; 2037 sbi->s_sb_block = sb_block;
2038 sbi->s_sectors_written_start = part_stat_read(sb->s_bdev->bd_part,
2039 sectors[1]);
2038 2040
2039 unlock_kernel(); 2041 unlock_kernel();
2040 2042
@@ -2072,6 +2074,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
2072 sb->s_magic = le16_to_cpu(es->s_magic); 2074 sb->s_magic = le16_to_cpu(es->s_magic);
2073 if (sb->s_magic != EXT4_SUPER_MAGIC) 2075 if (sb->s_magic != EXT4_SUPER_MAGIC)
2074 goto cantfind_ext4; 2076 goto cantfind_ext4;
2077 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
2075 2078
2076 /* Set defaults before we parse the mount options */ 2079 /* Set defaults before we parse the mount options */
2077 def_mount_opts = le32_to_cpu(es->s_default_mount_opts); 2080 def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
@@ -2921,6 +2924,10 @@ static int ext4_commit_super(struct super_block *sb,
2921 set_buffer_uptodate(sbh); 2924 set_buffer_uptodate(sbh);
2922 } 2925 }
2923 es->s_wtime = cpu_to_le32(get_seconds()); 2926 es->s_wtime = cpu_to_le32(get_seconds());
2927 es->s_kbytes_written =
2928 cpu_to_le64(EXT4_SB(sb)->s_kbytes_written +
2929 ((part_stat_read(sb->s_bdev->bd_part, sectors[1]) -
2930 EXT4_SB(sb)->s_sectors_written_start) >> 1));
2924 ext4_free_blocks_count_set(es, percpu_counter_sum_positive( 2931 ext4_free_blocks_count_set(es, percpu_counter_sum_positive(
2925 &EXT4_SB(sb)->s_freeblocks_counter)); 2932 &EXT4_SB(sb)->s_freeblocks_counter));
2926 es->s_free_inodes_count = cpu_to_le32(percpu_counter_sum_positive( 2933 es->s_free_inodes_count = cpu_to_le32(percpu_counter_sum_positive(