Skip to content

Commit

Permalink
blk-mq: export setting request completion state
Browse files Browse the repository at this point in the history
This is preparing for drivers that want to directly alter the state of
their requests. No functional change here.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Keith Busch authored and Jens Axboe committed Jul 24, 2018
1 parent 8f3ea35 commit 0fc09f9
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
4 changes: 1 addition & 3 deletions block/blk-mq.c
Original file line number Diff line number Diff line change
Expand Up @@ -558,10 +558,8 @@ static void __blk_mq_complete_request(struct request *rq)
bool shared = false;
int cpu;

if (cmpxchg(&rq->state, MQ_RQ_IN_FLIGHT, MQ_RQ_COMPLETE) !=
MQ_RQ_IN_FLIGHT)
if (!blk_mq_mark_complete(rq))
return;

if (rq->internal_tag != -1)
blk_mq_sched_completed_request(rq);

Expand Down
14 changes: 14 additions & 0 deletions include/linux/blk-mq.h
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,20 @@ void blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, int nr_hw_queues);

void blk_mq_quiesce_queue_nowait(struct request_queue *q);

/**
* blk_mq_mark_complete() - Set request state to complete
* @rq: request to set to complete state
*
* Returns true if request state was successfully set to complete. If
* successful, the caller is responsibile for seeing this request is ended, as
* blk_mq_complete_request will not work again.
*/
static inline bool blk_mq_mark_complete(struct request *rq)
{
return cmpxchg(&rq->state, MQ_RQ_IN_FLIGHT, MQ_RQ_COMPLETE) ==
MQ_RQ_IN_FLIGHT;
}

/*
* Driver command data is immediately after the request. So subtract request
* size to get back to the original request, add request size to get the PDU.
Expand Down

0 comments on commit 0fc09f9

Please sign in to comment.