Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b3f25fc authored by Keith Busch's avatar Keith Busch Committed by Jens Axboe
Browse files

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: default avatarKeith Busch <keith.busch@intel.com>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 1885b24d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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))
		return;
	if (rq->cmd_flags & REQ_NO_TIMEOUT)
		return;

	if (time_after_eq(jiffies, rq->deadline)) {
		if (!blk_mark_rq_complete(rq))
+3 −0
Original line number Diff line number Diff line
@@ -190,6 +190,9 @@ void blk_add_timer(struct request *req)
	struct request_queue *q = req->q;
	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 */
	if (!q->mq_ops && !q->rq_timed_out_fn)
		return;
+2 −0
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ enum rq_flag_bits {
	__REQ_PM,		/* runtime pm request */
	__REQ_HASHED,		/* on IO scheduler merge hash */
	__REQ_MQ_INFLIGHT,	/* track inflight for MQ */
	__REQ_NO_TIMEOUT,	/* requests may never expire */
	__REQ_NR_BITS,		/* stops here */
};

@@ -243,5 +244,6 @@ enum rq_flag_bits {
#define REQ_PM			(1ULL << __REQ_PM)
#define REQ_HASHED		(1ULL << __REQ_HASHED)
#define REQ_MQ_INFLIGHT		(1ULL << __REQ_MQ_INFLIGHT)
#define REQ_NO_TIMEOUT		(1ULL << __REQ_NO_TIMEOUT)

#endif /* __LINUX_BLK_TYPES_H */