blk-mq: allow drivers to hook into I/O completion
Split out the bottom half of blk_mq_end_io so that drivers can perform work when they know a request has been completed, but before it has been freed. This also obsoletes blk_mq_end_io_partial as drivers can now pass any value to blk_update_request directly. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
committed by
Jens Axboe
parent
6700a678c0
commit
63151a449e
+10
-6
@@ -294,20 +294,24 @@ void blk_mq_clone_flush_request(struct request *flush_rq,
|
||||
hctx->cmd_size);
|
||||
}
|
||||
|
||||
bool blk_mq_end_io_partial(struct request *rq, int error, unsigned int nr_bytes)
|
||||
inline void __blk_mq_end_io(struct request *rq, int error)
|
||||
{
|
||||
if (blk_update_request(rq, error, blk_rq_bytes(rq)))
|
||||
return true;
|
||||
|
||||
blk_account_io_done(rq);
|
||||
|
||||
if (rq->end_io)
|
||||
rq->end_io(rq, error);
|
||||
else
|
||||
blk_mq_free_request(rq);
|
||||
return false;
|
||||
}
|
||||
EXPORT_SYMBOL(blk_mq_end_io_partial);
|
||||
EXPORT_SYMBOL(__blk_mq_end_io);
|
||||
|
||||
void blk_mq_end_io(struct request *rq, int error)
|
||||
{
|
||||
if (blk_update_request(rq, error, blk_rq_bytes(rq)))
|
||||
BUG();
|
||||
__blk_mq_end_io(rq, error);
|
||||
}
|
||||
EXPORT_SYMBOL(blk_mq_end_io);
|
||||
|
||||
static void __blk_mq_complete_request_remote(void *data)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user