/* Description: Ends all I/O on a request. It does not handle partial completions, unless the driver actually implements this in its completion callback through requeueing. The actual completion happens out-of-order, through a softirq handler. The user must have registered a completion callback through blk_queue_softirq_done().  */
void blk_complete_request(struct request *req)
/* Description: Ends all I/O on a request. It does not handle partial completions, unless the driver actually implements this in its completion callback through requeueing. The actual completion happens out-of-order, through a softirq handler. The user must have registered a completion callback through blk_queue_softirq_done().  */
void blk_complete_request(struct request *req)
{
	if (unlikely(blk_should_fake_timeout(req->q)))
		return;
	if (!blk_mark_rq_complete(req))
		__blk_complete_request(req);
}