diff options
author | Jens Axboe <axboe@kernel.dk> | 2023-01-04 08:51:19 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2023-01-04 09:05:23 -0700 |
commit | 613b14884b8595e20b9fac4126bf627313827fbe (patch) | |
tree | c779b681aaaeb9854bc310c3a618b8c72f376686 /block | |
parent | 1551ed5a178ca030adc92b1eb29157b5e92bf134 (diff) | |
download | linux-613b14884b8595e20b9fac4126bf627313827fbe.tar.gz linux-613b14884b8595e20b9fac4126bf627313827fbe.tar.bz2 linux-613b14884b8595e20b9fac4126bf627313827fbe.zip |
block: handle bio_split_to_limits() NULL return
This can't happen right now, but in preparation for allowing
bio_split_to_limits() returning NULL if it ended the bio, check for it
in all the callers.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-merge.c | 4 | ||||
-rw-r--r-- | block/blk-mq.c | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/block/blk-merge.c b/block/blk-merge.c index 35a8f75cc45d..071c5f8cf0cf 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -358,11 +358,13 @@ struct bio *__bio_split_to_limits(struct bio *bio, default: split = bio_split_rw(bio, lim, nr_segs, bs, get_max_io_size(bio, lim) << SECTOR_SHIFT); + if (IS_ERR(split)) + return NULL; break; } if (split) { - /* there isn't chance to merge the splitted bio */ + /* there isn't chance to merge the split bio */ split->bi_opf |= REQ_NOMERGE; blkcg_bio_issue_init(split); diff --git a/block/blk-mq.c b/block/blk-mq.c index c5cf0dbca1db..2c49b4151da1 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -2951,8 +2951,11 @@ void blk_mq_submit_bio(struct bio *bio) blk_status_t ret; bio = blk_queue_bounce(bio, q); - if (bio_may_exceed_limits(bio, &q->limits)) + if (bio_may_exceed_limits(bio, &q->limits)) { bio = __bio_split_to_limits(bio, &q->limits, &nr_segs); + if (!bio) + return; + } if (!bio_integrity_prep(bio)) return; |