]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
md/raid0: Handle bio_split() errors
authorJohn Garry <john.g.garry@oracle.com>
Mon, 20 Oct 2025 13:06:46 +0000 (09:06 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Oct 2025 14:20:42 +0000 (16:20 +0200)
[ Upstream commit 74538fdac3e85aae55eb4ed786478ed2384cb85d ]

Add proper bio_split() error handling. For any error, set bi_status, end
the bio, and return.

Reviewed-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: John Garry <john.g.garry@oracle.com>
Link: https://lore.kernel.org/r/20241111112150.3756529-5-john.g.garry@oracle.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Stable-dep-of: 22f166218f73 ("md: fix mssing blktrace bio split events")
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/md/raid0.c

index 31bea72bcb01ad6c160554cd05b114240056bdfa..67ec633d27e26b42bd96f7f9e1edec260a7442f1 100644 (file)
@@ -464,6 +464,12 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
                struct bio *split = bio_split(bio,
                        zone->zone_end - bio->bi_iter.bi_sector, GFP_NOIO,
                        &mddev->bio_set);
+
+               if (IS_ERR(split)) {
+                       bio->bi_status = errno_to_blk_status(PTR_ERR(split));
+                       bio_endio(bio);
+                       return;
+               }
                bio_chain(split, bio);
                submit_bio_noacct(bio);
                bio = split;
@@ -606,6 +612,12 @@ static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
        if (sectors < bio_sectors(bio)) {
                struct bio *split = bio_split(bio, sectors, GFP_NOIO,
                                              &mddev->bio_set);
+
+               if (IS_ERR(split)) {
+                       bio->bi_status = errno_to_blk_status(PTR_ERR(split));
+                       bio_endio(bio);
+                       return true;
+               }
                bio_chain(split, bio);
                raid0_map_submit_bio(mddev, bio);
                bio = split;