Commit 6eb09685 authored by John Garry's avatar John Garry Committed by Jens Axboe
Browse files

block: Handle bio_split() errors in bio_submit_split()

parent 27b26f09
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -107,17 +107,18 @@ static unsigned int bio_allowed_max_sectors(const struct queue_limits *lim)

static struct bio *bio_submit_split(struct bio *bio, int split_sectors)
{
	if (unlikely(split_sectors < 0)) {
		bio->bi_status = errno_to_blk_status(split_sectors);
		bio_endio(bio);
		return NULL;
	}
	if (unlikely(split_sectors < 0))
		goto error;

	if (split_sectors) {
		struct bio *split;

		split = bio_split(bio, split_sectors, GFP_NOIO,
				&bio->bi_bdev->bd_disk->bio_split);
		if (IS_ERR(split)) {
			split_sectors = PTR_ERR(split);
			goto error;
		}
		split->bi_opf |= REQ_NOMERGE;
		blkcg_bio_issue_init(split);
		bio_chain(split, bio);
@@ -128,6 +129,10 @@ static struct bio *bio_submit_split(struct bio *bio, int split_sectors)
	}

	return bio;
error:
	bio->bi_status = errno_to_blk_status(split_sectors);
	bio_endio(bio);
	return NULL;
}

struct bio *bio_split_discard(struct bio *bio, const struct queue_limits *lim,