linux/block/blk-timeout.c
/**
 * blk_abort_request -- Request request recovery for the specified command
 * @req:	pointer to the request of interest
 *
 * This function requests that the block layer start recovery for the
 * request by deleting the timer and calling the q's timeout function.
 * LLDDs who implement their own error recovery MAY ignore the timeout
 * event if they generated blk_abort_req. Must hold queue lock.
 */
- Request request recovery for the specified command
@req:        pointer to the request of interest

This function requests that the block layer start recovery for the
request by deleting the timer and calling the q's timeout function.
LLDDs who implement their own error recovery MAY ignore the timeout
event if they generated blk_abort_req. Must hold queue lock.
- Request request recovery for the specified command @req : pointer to the request of interest This function requests that the block layer start recovery for the request by deleting the timer and calling the q ' s timeout function . LLDDs who implement their own error recovery MAY ignore the timeout event if they generated blk_abort_req . Must hold queue lock .
void blk_abort_request(struct request *req)
{
	if (req->q->mq_ops) {
		blk_rq_set_deadline(req, jiffies);
		kblockd_schedule_work(&req->q->timeout_work);
	} else {
		if (blk_mark_rq_complete(req))
			return;
		blk_delete_timer(req);
		blk_rq_timed_out(req);
	}
}
void blk_abort_request ( struct request * req ) { if ( req -> q -> mq_ops ) { blk_rq_set_deadline ( req , jiffies ) ; kblockd_schedule_work ( & req -> q -> timeout_work ) ; } else { if ( blk_mark_rq_complete ( req ) ) return ; blk_delete_timer ( req ) ; blk_rq_timed_out ( req ) ; } }
blk_abort_request -- Request request recovery for the specified command
 @req:        pointer to the request of interest
blk_abort_request -- Request request recovery for the specified command @req : pointer to the request of interest
/*
		 * All we need to ensure is that timeout scan takes place
		 * immediately and that scan sees the new timeout value.
		 * No need for fancy synchronizations.
		 */