Hi, 在 2024/09/19 17:23, John Garry 写道:
Add proper bio_split() error handling. For any error, call raid_end_bio_io() and return; Signed-off-by: John Garry <john.g.garry@xxxxxxxxxx> --- drivers/md/raid1.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 6c9d24203f39..c561e2d185e2 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -1383,6 +1383,10 @@ static void raid1_read_request(struct mddev *mddev, struct bio *bio, if (max_sectors < bio_sectors(bio)) { struct bio *split = bio_split(bio, max_sectors, gfp, &conf->bio_split); + if (IS_ERR(split)) { + raid_end_bio_io(r1_bio); + return; + }
This way, BLK_STS_IOERR will always be returned, perhaps what you want is to return the error code from bio_split()? Thanks, Kuai
bio_chain(split, bio); submit_bio_noacct(bio); bio = split; @@ -1576,6 +1580,10 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio, if (max_sectors < bio_sectors(bio)) { struct bio *split = bio_split(bio, max_sectors, GFP_NOIO, &conf->bio_split); + if (IS_ERR(split)) { + raid_end_bio_io(r1_bio); + return; + } bio_chain(split, bio); submit_bio_noacct(bio); bio = split;