I agree with this plan, I will also test this patch also. Thanks
-----邮件原件----- 发件人: Chao Yu <yuch...@huawei.com> 发送时间: 2021年5月12日 9:52 收件人: Jaegeuk Kim <jaeg...@kernel.org>; changfeng...@vivo.com 抄送: linux-f2fs-devel@lists.sourceforge.net 主题: Re: [f2fs-dev] 答复: [PATCH v4] f2fs: compress: avoid unnecessary check in f2fs_prepare_compress_overwrite On 2021/5/12 5:50, Jaegeuk Kim wrote: > On 05/11, changfeng...@vivo.com wrote: >> Hi Jaegeuk: >> >> If there're existing clusters beyond i_size, may cause data >> corruption, but will this happen in normal? maybe some error can >> cause this, if i_size is error the data beyond size still can't >> handle properly. Is there normal case can casue existing clusters beyond >> i_size? > > We don't have a rule to sync between i_size and i_blocks. I can't image a case that compressed cluster may cross filesize, it looks it's a bug if that happened, but I'm not sure I have considered all cases. So, I prefer to add a check condition as below, then testing w/ xfstest/por_fsstress for a while. Subject: [PATCH] f2fs: compress: compressed cluster should not cross i_size --- fs/f2fs/data.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 06d1e58d3882..9acca358d578 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -3325,6 +3325,8 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping, err = ret; goto fail; } else if (ret) { + f2fs_bug_on(sbi, index >= + DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE)); return 0; } } -- 2.29.2 > >> >> Thanks. >> >> -----邮件原件----- >> 发件人: Jaegeuk Kim <jaeg...@kernel.org> >> 发送时间: 2021年5月10日 23:44 >> 收件人: Fengnan Chang <changfeng...@vivo.com> >> 抄送: c...@kernel.org; linux-f2fs-devel@lists.sourceforge.net >> 主题: Re: [PATCH v4] f2fs: compress: avoid unnecessary check in >> f2fs_prepare_compress_overwrite >> >> On 05/07, Fengnan Chang wrote: >>> when write compressed file with O_TRUNC, there will be a lot of >>> unnecessary check valid blocks in f2fs_prepare_compress_overwrite, >>> especially when written in page size, remove it. >>> >>> This patch will not bring significant performance improvements, I test >>> this on mobile phone, use androbench, the sequential write test case >>> was open file with O_TRUNC, set write size to 4KB, performance >>> improved about 2%-3%. If write size set to 32MB, performance improved >> about 0.5%. >>> >>> Signed-off-by: Fengnan Chang <changfeng...@vivo.com> >>> --- >>> fs/f2fs/data.c | 8 ++++++++ >>> 1 file changed, 8 insertions(+) >>> >>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index >>> cf935474ffba..b9ec7b182f45 100644 >>> --- a/fs/f2fs/data.c >>> +++ b/fs/f2fs/data.c >>> @@ -3303,9 +3303,17 @@ static int f2fs_write_begin(struct file *file, >>> struct address_space *mapping, #ifdef CONFIG_F2FS_FS_COMPRESSION >>> if (f2fs_compressed_file(inode)) { >>> int ret; >>> + pgoff_t end = (i_size_read(inode) + PAGE_SIZE - 1) >> >> PAGE_SHIFT; >>> >>> *fsdata = NULL; >>> >>> + /* >>> + * when write pos is bigger than inode size >> ,f2fs_prepare_compress_overwrite >>> + * always return 0, so check pos first to avoid this. >>> + */ >>> + if (index >= end) >>> + goto repeat; >> >> What if there're existing clusters beyond i_size? Given performance impacts, >> do we really need this? >> >>> + >>> ret = f2fs_prepare_compress_overwrite(inode, pagep, >>> index, fsdata); >>> if (ret < 0) { >>> -- >>> 2.29.0 >> > > > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel > _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel