blk-mq: allow setting of per-request timeouts
authorJens Axboe <axboe@fb.com>
Fri, 23 May 2014 20:14:57 +0000 (14:14 -0600)
committerJens Axboe <axboe@fb.com>
Fri, 23 May 2014 20:14:57 +0000 (14:14 -0600)
Currently blk-mq uses the queue timeout for all requests. But
for some commands, drivers may want to set a specific timeout
for special requests. Allow this to be passed in through
request->timeout, and use it if set.

Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c

index 54e78863c083d2c2748108198189e06e64d6de10..9bc075335d065ebb59fc5c9b40284602dd98465c 100644 (file)
@@ -454,9 +454,13 @@ static void blk_mq_start_request(struct request *rq, bool last)
        /*
         * Just mark start time and set the started bit. Due to memory
         * ordering, we know we'll see the correct deadline as long as
-        * REQ_ATOMIC_STARTED is seen.
+        * REQ_ATOMIC_STARTED is seen. Use the default queue timeout,
+        * unless one has been set in the request.
         */
-       rq->deadline = jiffies + q->rq_timeout;
+       if (!rq->timeout)
+               rq->deadline = jiffies + q->rq_timeout;
+       else
+               rq->deadline = jiffies + rq->timeout;
 
        /*
         * Mark us as started and clear complete. Complete might have been