Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e4cbee9 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: switch bios to blk_status_t



Replace bi_error with a new bi_status to allow for a clear conversion.
Note that device mapper overloaded bi_error with a private value, which
we'll have to keep arround at least for now and thus propagate to a
proper blk_status_t value.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent fc17b653
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ static inline unsigned int bio_integrity_bytes(struct blk_integrity *bi,
 * @bio:	bio to generate/verify integrity metadata for
 * @proc_fn:	Pointer to the relevant processing function
 */
static int bio_integrity_process(struct bio *bio,
static blk_status_t bio_integrity_process(struct bio *bio,
				 integrity_processing_fn *proc_fn)
{
	struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
@@ -229,7 +229,7 @@ static int bio_integrity_process(struct bio *bio,
	struct bvec_iter bviter;
	struct bio_vec bv;
	struct bio_integrity_payload *bip = bio_integrity(bio);
	unsigned int ret = 0;
	blk_status_t ret = BLK_STS_OK;
	void *prot_buf = page_address(bip->bip_vec->bv_page) +
		bip->bip_vec->bv_offset;

@@ -366,7 +366,7 @@ static void bio_integrity_verify_fn(struct work_struct *work)
	struct bio *bio = bip->bip_bio;
	struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);

	bio->bi_error = bio_integrity_process(bio, bi->profile->verify_fn);
	bio->bi_status = bio_integrity_process(bio, bi->profile->verify_fn);

	/* Restore original bio completion handler */
	bio->bi_end_io = bip->bip_end_io;
@@ -395,7 +395,7 @@ void bio_integrity_endio(struct bio *bio)
	 * integrity metadata.  Restore original bio end_io handler
	 * and run it.
	 */
	if (bio->bi_error) {
	if (bio->bi_status) {
		bio->bi_end_io = bip->bip_end_io;
		bio_endio(bio);

+4 −4
Original line number Diff line number Diff line
@@ -309,8 +309,8 @@ static struct bio *__bio_chain_endio(struct bio *bio)
{
	struct bio *parent = bio->bi_private;

	if (!parent->bi_error)
		parent->bi_error = bio->bi_error;
	if (!parent->bi_status)
		parent->bi_status = bio->bi_status;
	bio_put(bio);
	return parent;
}
@@ -918,7 +918,7 @@ static void submit_bio_wait_endio(struct bio *bio)
{
	struct submit_bio_ret *ret = bio->bi_private;

	ret->error = bio->bi_error;
	ret->error = blk_status_to_errno(bio->bi_status);
	complete(&ret->event);
}

@@ -1818,7 +1818,7 @@ void bio_endio(struct bio *bio)

	if (bio->bi_bdev && bio_flagged(bio, BIO_TRACE_COMPLETION)) {
		trace_block_bio_complete(bdev_get_queue(bio->bi_bdev),
					 bio, bio->bi_error);
					 bio, bio->bi_status);
		bio_clear_flag(bio, BIO_TRACE_COMPLETION);
	}

+13 −7
Original line number Diff line number Diff line
@@ -144,6 +144,9 @@ static const struct {
	[BLK_STS_PROTECTION]	= { -EILSEQ,	"protection" },
	[BLK_STS_RESOURCE]	= { -ENOMEM,	"kernel resource" },

	/* device mapper special case, should not leak out: */
	[BLK_STS_DM_REQUEUE]	= { -EREMCHG, "dm internal retry" },

	/* everything else not covered above: */
	[BLK_STS_IOERR]		= { -EIO,	"I/O" },
};
@@ -188,7 +191,7 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
			  unsigned int nbytes, blk_status_t error)
{
	if (error)
		bio->bi_error = blk_status_to_errno(error);
		bio->bi_status = error;

	if (unlikely(rq->rq_flags & RQF_QUIET))
		bio_set_flag(bio, BIO_QUIET);
@@ -1717,7 +1720,7 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
	blk_queue_split(q, &bio, q->bio_split);

	if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
		bio->bi_error = -EIO;
		bio->bi_status = BLK_STS_IOERR;
		bio_endio(bio);
		return BLK_QC_T_NONE;
	}
@@ -1775,7 +1778,10 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
	req = get_request(q, bio->bi_opf, bio, GFP_NOIO);
	if (IS_ERR(req)) {
		__wbt_done(q->rq_wb, wb_acct);
		bio->bi_error = PTR_ERR(req);
		if (PTR_ERR(req) == -ENOMEM)
			bio->bi_status = BLK_STS_RESOURCE;
		else
			bio->bi_status = BLK_STS_IOERR;
		bio_endio(bio);
		goto out_unlock;
	}
@@ -1930,7 +1936,7 @@ generic_make_request_checks(struct bio *bio)
{
	struct request_queue *q;
	int nr_sectors = bio_sectors(bio);
	int err = -EIO;
	blk_status_t status = BLK_STS_IOERR;
	char b[BDEVNAME_SIZE];
	struct hd_struct *part;

@@ -1973,7 +1979,7 @@ generic_make_request_checks(struct bio *bio)
	    !test_bit(QUEUE_FLAG_WC, &q->queue_flags)) {
		bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA);
		if (!nr_sectors) {
			err = 0;
			status = BLK_STS_OK;
			goto end_io;
		}
	}
@@ -2025,9 +2031,9 @@ generic_make_request_checks(struct bio *bio)
	return true;

not_supported:
	err = -EOPNOTSUPP;
	status = BLK_STS_NOTSUPP;
end_io:
	bio->bi_error = err;
	bio->bi_status = status;
	bio_endio(bio);
	return false;
}
+2 −2
Original line number Diff line number Diff line
@@ -384,9 +384,9 @@ static struct kobj_type integrity_ktype = {
	.sysfs_ops	= &integrity_ops,
};

static int blk_integrity_nop_fn(struct blk_integrity_iter *iter)
static blk_status_t blk_integrity_nop_fn(struct blk_integrity_iter *iter)
{
	return 0;
	return BLK_STS_OK;
}

static const struct blk_integrity_profile nop_profile = {
+2 −2
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@ static void bounce_end_io(struct bio *bio, mempool_t *pool)
		mempool_free(bvec->bv_page, pool);
	}

	bio_orig->bi_error = bio->bi_error;
	bio_orig->bi_status = bio->bi_status;
	bio_endio(bio_orig);
	bio_put(bio);
}
@@ -163,7 +163,7 @@ static void __bounce_end_io_read(struct bio *bio, mempool_t *pool)
{
	struct bio *bio_orig = bio->bi_private;

	if (!bio->bi_error)
	if (!bio->bi_status)
		copy_to_high_bio_irq(bio_orig, bio);

	bounce_end_io(bio, pool);
Loading