block: implement and use [__]blk_end_request_all()

There are many [__]blk_end_request() call sites which call it with
full request length and expect full completion.  Many of them ensure
that the request actually completes by doing BUG_ON() the return
value, which is awkward and error-prone.

This patch adds [__]blk_end_request_all() which takes @rq and @error
and fully completes the request.  BUG_ON() is added to to ensure that
this actually happens.

Most conversions are simple but there are a few noteworthy ones.

* cdrom/viocd: viocd_end_request() replaced with direct calls to
  __blk_end_request_all().

* s390/block/dasd: dasd_end_request() replaced with direct calls to
  __blk_end_request_all().

* s390/char/tape_block: tapeblock_end_request() replaced with direct
  calls to blk_end_request_all().

[ Impact: cleanup ]

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Mike Miller <mike.miller@hp.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Jeff Garzik <jgarzik@pobox.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Jeremy Fitzhardinge <jeremy@xensource.com>
Cc: Alex Dubov <oakad@yahoo.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
Tejun Heo
2009-04-23 11:05:19 +09:00
committed by Jens Axboe
parent b243ddcbe9
commit 40cbbb781d
15 changed files with 58 additions and 73 deletions

View File

@@ -882,6 +882,22 @@ static inline bool blk_end_request(struct request *rq, int error,
return blk_end_bidi_request(rq, error, nr_bytes, 0);
}
/**
* blk_end_request_all - Helper function for drives to finish the request.
* @rq: the request to finish
* @err: %0 for success, < %0 for error
*
* Description:
* Completely finish @rq.
*/
static inline void blk_end_request_all(struct request *rq, int error)
{
bool pending;
pending = blk_end_request(rq, error, blk_rq_bytes(rq));
BUG_ON(pending);
}
/**
* __blk_end_request - Helper function for drivers to complete the request.
* @rq: the request being processed
@@ -901,6 +917,22 @@ static inline bool __blk_end_request(struct request *rq, int error,
return __blk_end_bidi_request(rq, error, nr_bytes, 0);
}
/**
* __blk_end_request_all - Helper function for drives to finish the request.
* @rq: the request to finish
* @err: %0 for success, < %0 for error
*
* Description:
* Completely finish @rq. Must be called with queue lock held.
*/
static inline void __blk_end_request_all(struct request *rq, int error)
{
bool pending;
pending = __blk_end_request(rq, error, blk_rq_bytes(rq));
BUG_ON(pending);
}
/**
* end_request - end I/O on the current segment of the request
* @rq: the request being processed