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

Commit 5450d3e1 authored by Kiyoshi Ueda's avatar Kiyoshi Ueda Committed by Jens Axboe
Browse files

blk_end_request: cleanup 'uptodate' related code (take 4)



This patch converts 'uptodate' arguments of no longer exported
interfaces, end_that_request_first/last, to 'error', and removes
internal conversions for it in blk_end_request interfaces.

Also, this patch removes no longer needed end_io_error().

Cc: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: default avatarKiyoshi Ueda <k-ueda@ct.jp.nec.com>
Signed-off-by: default avatarJun'ichi Nomura <j-nomura@ce.jp.nec.com>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 3bcddeac
Loading
Loading
Loading
Loading
+9 −47
Original line number Diff line number Diff line
@@ -3435,7 +3435,7 @@ static void blk_recalc_rq_sectors(struct request *rq, int nsect)
/**
 * __end_that_request_first - end I/O on a request
 * @req:      the request being processed
 * @uptodate: 1 for success, 0 for I/O error, < 0 for specific error
 * @error:    0 for success, < 0 for error
 * @nr_bytes: number of bytes to complete
 *
 * Description:
@@ -3446,21 +3446,14 @@ static void blk_recalc_rq_sectors(struct request *rq, int nsect)
 *     0 - we are done with this request, call end_that_request_last()
 *     1 - still buffers pending for this request
 **/
static int __end_that_request_first(struct request *req, int uptodate,
static int __end_that_request_first(struct request *req, int error,
				    int nr_bytes)
{
	int total_bytes, bio_nbytes, error, next_idx = 0;
	int total_bytes, bio_nbytes, next_idx = 0;
	struct bio *bio;

	blk_add_trace_rq(req->q, req, BLK_TA_COMPLETE);

	/*
	 * extend uptodate bool to allow < 0 value to be direct io error
	 */
	error = 0;
	if (end_io_error(uptodate))
		error = !uptodate ? -EIO : uptodate;

	/*
	 * for a REQ_BLOCK_PC request, we want to carry any eventual
	 * sense key with us all the way through
@@ -3468,7 +3461,7 @@ static int __end_that_request_first(struct request *req, int uptodate,
	if (!blk_pc_request(req))
		req->errors = 0;

	if (!uptodate) {
	if (error) {
		if (blk_fs_request(req) && !(req->cmd_flags & REQ_QUIET))
			printk("end_request: I/O error, dev %s, sector %llu\n",
				req->rq_disk ? req->rq_disk->disk_name : "?",
@@ -3641,17 +3634,9 @@ EXPORT_SYMBOL(blk_complete_request);
/*
 * queue lock must be held
 */
static void end_that_request_last(struct request *req, int uptodate)
static void end_that_request_last(struct request *req, int error)
{
	struct gendisk *disk = req->rq_disk;
	int error;

	/*
	 * extend uptodate bool to allow < 0 value to be direct io error
	 */
	error = 0;
	if (end_io_error(uptodate))
		error = !uptodate ? -EIO : uptodate;

	if (unlikely(laptop_mode) && blk_fs_request(req))
		laptop_io_completion();
@@ -3776,14 +3761,6 @@ EXPORT_SYMBOL(end_request);

static void complete_request(struct request *rq, int error)
{
	/*
	 * REMOVEME: This conversion is transitional and will be removed
	 *           when old end_that_request_* are unexported.
	 */
	int uptodate = 1;
	if (error)
		uptodate = (error == -EIO) ? 0 : error;

	if (blk_rq_tagged(rq))
		blk_queue_end_tag(rq->q, rq);

@@ -3793,7 +3770,7 @@ static void complete_request(struct request *rq, int error)
	if (blk_bidi_rq(rq) && !rq->end_io)
		__blk_put_request(rq->next_rq->q, rq->next_rq);

	end_that_request_last(rq, uptodate);
	end_that_request_last(rq, error);
}

/**
@@ -3820,21 +3797,14 @@ static int blk_end_io(struct request *rq, int error, int nr_bytes,
{
	struct request_queue *q = rq->q;
	unsigned long flags = 0UL;
	/*
	 * REMOVEME: This conversion is transitional and will be removed
	 *           when old end_that_request_* are unexported.
	 */
	int uptodate = 1;
	if (error)
		uptodate = (error == -EIO) ? 0 : error;

	if (blk_fs_request(rq) || blk_pc_request(rq)) {
		if (__end_that_request_first(rq, uptodate, nr_bytes))
		if (__end_that_request_first(rq, error, nr_bytes))
			return 1;

		/* Bidi request must be completed as a whole */
		if (blk_bidi_rq(rq) &&
		    __end_that_request_first(rq->next_rq, uptodate, bidi_bytes))
		    __end_that_request_first(rq->next_rq, error, bidi_bytes))
			return 1;
	}

@@ -3886,16 +3856,8 @@ EXPORT_SYMBOL_GPL(blk_end_request);
 **/
int __blk_end_request(struct request *rq, int error, int nr_bytes)
{
	/*
	 * REMOVEME: This conversion is transitional and will be removed
	 *           when old end_that_request_* are unexported.
	 */
	int uptodate = 1;
	if (error)
		uptodate = (error == -EIO) ? 0 : error;

	if (blk_fs_request(rq) || blk_pc_request(rq)) {
		if (__end_that_request_first(rq, uptodate, nr_bytes))
		if (__end_that_request_first(rq, error, nr_bytes))
			return 1;
	}

+0 −8
Original line number Diff line number Diff line
@@ -745,14 +745,6 @@ extern void blk_complete_request(struct request *);
extern unsigned int blk_rq_bytes(struct request *rq);
extern unsigned int blk_rq_cur_bytes(struct request *rq);

/*
 * end_that_request_first/chunk() takes an uptodate argument. we account
 * any value <= as an io error. 0 means -EIO for compatability reasons,
 * any other < 0 value is the direct error type. An uptodate value of
 * 1 indicates successful io completion
 */
#define end_io_error(uptodate)	(unlikely((uptodate) <= 0))

static inline void blkdev_dequeue_request(struct request *req)
{
	elv_dequeue_request(req->q, req);