]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
erofs: set error to bio if file-backed IO fails
authorSheng Yong <shengyong1@xiaomi.com>
Tue, 8 Apr 2025 12:23:50 +0000 (20:23 +0800)
committerGao Xiang <hsiangkao@linux.alibaba.com>
Wed, 9 Apr 2025 14:55:16 +0000 (22:55 +0800)
If a file-backed IO fails before submitting the bio to the lower
filesystem, an error is returned, but the bio->bi_status is not
marked as an error. However, the error information should be passed
to the end_io handler. Otherwise, the IO request will be treated as
successful.

Fixes: 283213718f5d ("erofs: support compressed inodes for fileio")
Signed-off-by: Sheng Yong <shengyong1@xiaomi.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250408122351.2104507-1-shengyong1@xiaomi.com
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
fs/erofs/fileio.c

index bec4b56b3826518b8d3b76630b3cf914d7bb3194..4fa0a0121288bd91cce8534623f158123cf613d5 100644 (file)
@@ -32,6 +32,8 @@ static void erofs_fileio_ki_complete(struct kiocb *iocb, long ret)
                ret = 0;
        }
        if (rq->bio.bi_end_io) {
+               if (ret < 0 && !rq->bio.bi_status)
+                       rq->bio.bi_status = errno_to_blk_status(ret);
                rq->bio.bi_end_io(&rq->bio);
        } else {
                bio_for_each_folio_all(fi, &rq->bio) {