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:
@@ -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
|
||||
|
Reference in New Issue
Block a user