diff options
author | Theodore Ts'o <tytso@mit.edu> | 2009-02-28 19:39:58 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2009-02-28 19:39:58 -0500 |
commit | afc32f7ee9febc020c73da61402351d4c90437f3 (patch) | |
tree | 7b78aaaac87eb704074f6ece996b2c78a69fbe18 /fs/ext4/super.c | |
parent | d6014301b5599fba395c42a1e96a7fe86f7d0b2d (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.c | 7 |
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( |