[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <7953c617-2f74-faa4-2aa4-c6ef9de2c28e@huawei.com>
Date: Sat, 30 Mar 2024 16:04:03 +0800
From: yangerkun <yangerkun@...wei.com>
To: Jan Kara <jack@...e.cz>, yangerkun <yangerkun@...weicloud.com>, "Theodore
Y . Ts'o" <tytso@....edu>
CC: <tytso@....edu>, <adilger.kernel@...ger.ca>, <boyu.mt@...bao.com>,
<linux-ext4@...r.kernel.org>
Subject: Re: [PATCH] ext4: clear EXT4_GROUP_INFO_WAS_TRIMMED_BIT even mount
with discard
Hi, Ted,
Ping for this patch.
在 2024/2/21 19:18, Jan Kara 写道:
> On Sat 30-12-23 15:06:54, yangerkun wrote:
>> Commit 3d56b8d2c74c ("ext4: Speed up FITRIM by recording flags in
>> ext4_group_info") speed up fstrim by skipping trim trimmed group. We
>> also has the chance to clear trimmed once there exists some block free
>> for this group(mount without discard), and the next trim for this group
>> will work well too.
>>
>> For mount with discard, we will issue dicard when we free blocks, so
>> leave trimmed flag keep alive to skip useless trim trigger from
>> userspace seems reasonable. But for some case like ext4 build on
>> dm-thinpool(ext4 blocksize 4K, pool blocksize 128K), discard from ext4
>> maybe unaligned for dm thinpool, and thinpool will just finish this
>> discard(see process_discard_bio when begein equals to end) without
>> actually process discard. For this case, trim from userspace can really
>> help us to free some thinpool block.
>>
>> So convert to clear trimmed flag for all case no matter mounted with
>> discard or not.
>>
>> Fixes: 3d56b8d2c74c ("ext4: Speed up FITRIM by recording flags in ext4_group_info")
>> Signed-off-by: yangerkun <yangerkun@...weicloud.com>
>
> Thanks for the fix. It looks good. Feel free to add:
>
> Reviewed-by: Jan Kara <jack@...e.cz>
>
> Honza
>
>> ---
>> fs/ext4/mballoc.c | 10 ++++------
>> 1 file changed, 4 insertions(+), 6 deletions(-)
>>
>> diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
>> index d72b5e3c92ec..69240ae775f1 100644
>> --- a/fs/ext4/mballoc.c
>> +++ b/fs/ext4/mballoc.c
>> @@ -3855,11 +3855,8 @@ static void ext4_free_data_in_buddy(struct super_block *sb,
>> /*
>> * Clear the trimmed flag for the group so that the next
>> * ext4_trim_fs can trim it.
>> - * If the volume is mounted with -o discard, online discard
>> - * is supported and the free blocks will be trimmed online.
>> */
>> - if (!test_opt(sb, DISCARD))
>> - EXT4_MB_GRP_CLEAR_TRIMMED(db);
>> + EXT4_MB_GRP_CLEAR_TRIMMED(db);
>>
>> if (!db->bb_free_root.rb_node) {
>> /* No more items in the per group rb tree
>> @@ -6481,8 +6478,9 @@ static void ext4_mb_clear_bb(handle_t *handle, struct inode *inode,
>> " group:%u block:%d count:%lu failed"
>> " with %d", block_group, bit, count,
>> err);
>> - } else
>> - EXT4_MB_GRP_CLEAR_TRIMMED(e4b.bd_info);
>> + }
>> +
>> + EXT4_MB_GRP_CLEAR_TRIMMED(e4b.bd_info);
>>
>> ext4_lock_group(sb, block_group);
>> mb_free_blocks(inode, &e4b, bit, count_clusters);
>> --
>> 2.39.2
>>
>>
Powered by blists - more mailing lists