[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090323155024.GA27876@skywalker>
Date: Mon, 23 Mar 2009 21:20:24 +0530
From: "Aneesh Kumar K.V" <aneesh.kumar@...ux.vnet.ibm.com>
To: "Theodore Ts'o" <tytso@....edu>
Cc: linux-ext4@...r.kernel.org
Subject: Re: [PATCH] ext4: Track lifetime disk writes
On Sat, Feb 28, 2009 at 12:01:52AM -0500, Theodore Ts'o wrote:
>
> 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@....edu>
> ---
> fs/ext4/ext4.h | 3 ++-
> fs/ext4/ext4_sb.h | 4 ++++
> fs/ext4/super.c | 7 +++++++
> 3 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
> index 8599e37..f9a3bc3 100644
> --- a/fs/ext4/ext4.h
> +++ b/fs/ext4/ext4.h
> @@ -685,7 +685,8 @@ struct ext4_super_block {
> __u8 s_log_groups_per_flex; /* FLEX_BG group size */
> __u8 s_reserved_char_pad2;
> __le16 s_reserved_pad;
> - __u32 s_reserved[162]; /* Padding to the end of the block */
> + __le64 s_kbytes_written; /* nr of lifetime kilobytes written */
> + __u32 s_reserved[160]; /* Padding to the end of the block */
> };
>
> #ifdef __KERNEL__
> diff --git a/fs/ext4/ext4_sb.h b/fs/ext4/ext4_sb.h
> index 4e4d9cc..50ab116 100644
> --- a/fs/ext4/ext4_sb.h
> +++ b/fs/ext4/ext4_sb.h
> @@ -142,6 +142,10 @@ struct ext4_sb_info {
> /* locality groups */
> struct ext4_locality_group *s_locality_groups;
>
> + /* for write statistics */
> + unsigned long s_sectors_written_start;
> + u64 s_kbytes_written;
> +
> unsigned int s_log_groups_per_flex;
> struct flex_groups *s_flex_groups;
> };
Do we need this change ? We don't seems to be using it anywhere.
> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
> index c69f04c..007aa0a 100644
> --- a/fs/ext4/super.c
> +++ b/fs/ext4/super.c
> @@ -2039,6 +2039,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
> sbi->s_resgid = EXT4_DEF_RESGID;
> sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
> sbi->s_sb_block = sb_block;
> + sbi->s_sectors_written_start = part_stat_read(sb->s_bdev->bd_part,
> + sectors[1]);
>
> unlock_kernel();
>
> @@ -2535,6 +2537,7 @@ no_journal:
> }
>
> ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY);
> + sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
>
> /* determine the minimum size of new large inodes, if present */
> if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) {
> @@ -2929,6 +2932,10 @@ static int ext4_commit_super(struct super_block *sb,
> set_buffer_uptodate(sbh);
> }
> es->s_wtime = cpu_to_le32(get_seconds());
> + es->s_kbytes_written =
> + cpu_to_le64(EXT4_SB(sb)->s_kbytes_written +
> + ((part_stat_read(sb->s_bdev->bd_part, sectors[1]) -
> + EXT4_SB(sb)->s_sectors_written_start) >> 1));
> ext4_free_blocks_count_set(es, percpu_counter_sum_positive(
> &EXT4_SB(sb)->s_freeblocks_counter));
> es->s_free_inodes_count = cpu_to_le32(percpu_counter_sum_positive(
Can't we just do
es->s_kbytes_written = cpu_to_le64(le64_to_cpu(es->s_kbytes_written) + (part_stat_read(sb->s_bdev->bd_part, sectors[1]) >> 1))
During ext4_commit_super without even touching ext4_sb_info ?
What is being tracked in s_sectors_written_start ?
-aneesh
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists