mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
blk-mq: Allow requests to never expire
Some types of requests may be started that are not gauranteed to ever complete. This adds a request flag that a driver can use so mark the request as such. Signed-off-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
1885b24d23
commit
5b3f25fc34
@ -619,7 +619,7 @@ void blk_mq_rq_timed_out(struct request *req, bool reserved)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void blk_mq_check_expired(struct blk_mq_hw_ctx *hctx,
|
static void blk_mq_check_expired(struct blk_mq_hw_ctx *hctx,
|
||||||
struct request *rq, void *priv, bool reserved)
|
struct request *rq, void *priv, bool reserved)
|
||||||
{
|
{
|
||||||
@ -627,6 +627,8 @@ static void blk_mq_check_expired(struct blk_mq_hw_ctx *hctx,
|
|||||||
|
|
||||||
if (!test_bit(REQ_ATOM_STARTED, &rq->atomic_flags))
|
if (!test_bit(REQ_ATOM_STARTED, &rq->atomic_flags))
|
||||||
return;
|
return;
|
||||||
|
if (rq->cmd_flags & REQ_NO_TIMEOUT)
|
||||||
|
return;
|
||||||
|
|
||||||
if (time_after_eq(jiffies, rq->deadline)) {
|
if (time_after_eq(jiffies, rq->deadline)) {
|
||||||
if (!blk_mark_rq_complete(rq))
|
if (!blk_mark_rq_complete(rq))
|
||||||
|
@ -190,6 +190,9 @@ void blk_add_timer(struct request *req)
|
|||||||
struct request_queue *q = req->q;
|
struct request_queue *q = req->q;
|
||||||
unsigned long expiry;
|
unsigned long expiry;
|
||||||
|
|
||||||
|
if (req->cmd_flags & REQ_NO_TIMEOUT)
|
||||||
|
return;
|
||||||
|
|
||||||
/* blk-mq has its own handler, so we don't need ->rq_timed_out_fn */
|
/* blk-mq has its own handler, so we don't need ->rq_timed_out_fn */
|
||||||
if (!q->mq_ops && !q->rq_timed_out_fn)
|
if (!q->mq_ops && !q->rq_timed_out_fn)
|
||||||
return;
|
return;
|
||||||
|
@ -190,6 +190,7 @@ enum rq_flag_bits {
|
|||||||
__REQ_PM, /* runtime pm request */
|
__REQ_PM, /* runtime pm request */
|
||||||
__REQ_HASHED, /* on IO scheduler merge hash */
|
__REQ_HASHED, /* on IO scheduler merge hash */
|
||||||
__REQ_MQ_INFLIGHT, /* track inflight for MQ */
|
__REQ_MQ_INFLIGHT, /* track inflight for MQ */
|
||||||
|
__REQ_NO_TIMEOUT, /* requests may never expire */
|
||||||
__REQ_NR_BITS, /* stops here */
|
__REQ_NR_BITS, /* stops here */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -243,5 +244,6 @@ enum rq_flag_bits {
|
|||||||
#define REQ_PM (1ULL << __REQ_PM)
|
#define REQ_PM (1ULL << __REQ_PM)
|
||||||
#define REQ_HASHED (1ULL << __REQ_HASHED)
|
#define REQ_HASHED (1ULL << __REQ_HASHED)
|
||||||
#define REQ_MQ_INFLIGHT (1ULL << __REQ_MQ_INFLIGHT)
|
#define REQ_MQ_INFLIGHT (1ULL << __REQ_MQ_INFLIGHT)
|
||||||
|
#define REQ_NO_TIMEOUT (1ULL << __REQ_NO_TIMEOUT)
|
||||||
|
|
||||||
#endif /* __LINUX_BLK_TYPES_H */
|
#endif /* __LINUX_BLK_TYPES_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user