[PATCH] erofs: mark fileio folios uptodate based on the number of bytes read
Gao Xiang
hsiangkao at linux.alibaba.com
Thu Feb 26 20:36:01 AEDT 2026
On 2026/2/26 17:28, Gao Xiang wrote:
> Hi Yong,
>
> On 2026/2/26 17:09, Sheng Yong wrote:
>> From: Sheng Yong <shengyong1 at xiaomi.com>
>>
>> For file-backed mount, IO requests are handled by vfs_iocb_iter_read().
>> However, it can be interrupted by SIGKILL, returning the number of
>> bytes actually copied. Although unused folios are zero filled, they
>> are unexpectedly marked as uptodate.
>> This patch addresses this by setting folios uptodate based on the actual
>> number of bytes read for the plain backing file. And for the compressed
>> backing file, there may not have sufficient data for decompression,
>> in such case, the bio is marked with an error directly.
>>
>> Fixes: ce63cb62d794 ("erofs: support unencoded inodes for fileio")
>> Reported-by: chenguanyou <chenguanyou at xiaomi.com>
>> Signed-off-by: Yunlei He <heyunlei at xiaomi.com>
>> Signed-off-by: Sheng Yong <shengyong1 at xiaomi.com>
>
> Yes, it sounds possible. But can we just fail the
> whole I/O for both cases?
>
> In principle, we should retry the remaining I/O once more
> for short read, but failing the whole I/O could be one
> short-term solution.
I wonder if we should simply:
diff --git a/fs/erofs/fileio.c b/fs/erofs/fileio.c
index abe873f01297..98cdaa1cd1a7 100644
--- a/fs/erofs/fileio.c
+++ b/fs/erofs/fileio.c
@@ -25,10 +25,8 @@ static void erofs_fileio_ki_complete(struct kiocb *iocb, long ret)
container_of(iocb, struct erofs_fileio_rq, iocb);
struct folio_iter fi;
- if (ret >= 0 && ret != rq->bio.bi_iter.bi_size) {
- bio_advance(&rq->bio, ret);
- zero_fill_bio(&rq->bio);
- }
+ if (ret >= 0 && ret != rq->bio.bi_iter.bi_size)
+ ret = -EIO;
instead. IOWs, filling zeros means nothing for us.
Thanks,
Gao Xiang
>
> Thanks,
> Gao Xiang
>
More information about the Linux-erofs
mailing list