]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
md/raid0: Handle bio_split() errors
authorJohn Garry <john.g.garry@oracle.com>
Mon, 11 Nov 2024 11:21:48 +0000 (11:21 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 11 Nov 2024 15:35:46 +0000 (08:35 -0700)
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>
drivers/md/raid0.c

index 32d58752477847cf1db73e261992948a95c0e2cd..baaf5f8b80ae1c10fc3b80f448f5f40240238b8e 100644 (file)
@@ -466,6 +466,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;
@@ -608,6 +614,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;