Commit 613b1488 authored by Jens Axboe's avatar Jens Axboe
Browse files

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: default avatarJens Axboe <axboe@kernel.dk>
parent 1551ed5a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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);
+4 −1
Original line number Diff line number Diff line
@@ -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;
+2 −0
Original line number Diff line number Diff line
@@ -1607,6 +1607,8 @@ void drbd_submit_bio(struct bio *bio)
	struct drbd_device *device = bio->bi_bdev->bd_disk->private_data;

	bio = bio_split_to_limits(bio);
	if (!bio)
		return;

	/*
	 * what we "blindly" assume:
+2 −0
Original line number Diff line number Diff line
@@ -587,6 +587,8 @@ static void ps3vram_submit_bio(struct bio *bio)
	dev_dbg(&dev->core, "%s\n", __func__);

	bio = bio_split_to_limits(bio);
	if (!bio)
		return;

	spin_lock_irq(&priv->lock);
	busy = !bio_list_empty(&priv->list);
+2 −0
Original line number Diff line number Diff line
@@ -1742,6 +1742,8 @@ static void dm_split_and_process_bio(struct mapped_device *md,
		 * otherwise associated queue_limits won't be imposed.
		 */
		bio = bio_split_to_limits(bio);
		if (!bio)
			return;
	}

	init_clone_info(&ci, md, map, bio, is_abnormal);
Loading