Re: [PATCH v2 01/20] block: Add a flag for internal commands

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19/11/2021 19:57, Bart Van Assche wrote:
From: Hannes Reinecke <hare@xxxxxxx> >
Some drivers use a single tag space for requests submitted by the block
layer and driver-internal requests. Driver-internal requests will never
pass through the block layer but require a valid tag. This patch adds a
new request flag REQ_INTERNAL.

I'm not sure on the name. Don't we already use term "internal" for elevator request tag?

to mark such requests and a terminates any
such commands in blk_execute_rq_nowait() with a WARN_ON_ONCE() to signal
such an invalid usage.
FYI, I have been working on a different stream, that allows us to send the reserved request through the block layer, as we need it for poll mode support. The reason is that we need to send reserved requests on specific HW queues, which may be polling. However poll mode support only allows us to poll requests with bios, so that's a problem ATM.


Cc: Jens Axboe <axboe@xxxxxxxxx>
Cc: Christoph Hellwig <hch@xxxxxx>
Cc: Ming Lei <ming.lei@xxxxxxxxxx>
Cc: John Garry <john.garry@xxxxxxxxxx>
Signed-off-by: Hannes Reinecke <hare@xxxxxxx>
[ bvanassche: modified patch description ]
Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
---
  block/blk-exec.c          | 5 +++++
  include/linux/blk-mq.h    | 5 +++++
  include/linux/blk_types.h | 2 ++
  3 files changed, 12 insertions(+)

diff --git a/block/blk-exec.c b/block/blk-exec.c
index 1b8b47f6e79b..27d2e3779c13 100644
--- a/block/blk-exec.c
+++ b/block/blk-exec.c
@@ -53,6 +53,11 @@ void blk_execute_rq_nowait(struct gendisk *bd_disk, struct request *rq,
  	rq->rq_disk = bd_disk;
  	rq->end_io = done;
+ if (WARN_ON_ONCE(blk_rq_is_internal(rq))) {
+		blk_mq_end_request(rq, BLK_STS_NOTSUPP);
+		return;
+	}
+
  	blk_account_io_start(rq);
/*
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 2949d9ac7484..3b42fcdf0c15 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -208,6 +208,11 @@ static inline bool blk_rq_is_passthrough(struct request *rq)
  	return blk_op_is_passthrough(req_op(rq));
  }
+static inline bool blk_rq_is_internal(struct request *rq)
+{
+	return rq->cmd_flags & REQ_INTERNAL;
+}
+
  static inline unsigned short req_get_ioprio(struct request *req)
  {
  	return req->ioprio;
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index fe065c394fff..1ae2365e02d1 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -411,6 +411,7 @@ enum req_flag_bits {
  	/* for driver use */
  	__REQ_DRV,
  	__REQ_SWAP,		/* swapping request. */
+	__REQ_INTERNAL,		/* driver-internal command */
  	__REQ_NR_BITS,		/* stops here */
  };
@@ -435,6 +436,7 @@ enum req_flag_bits { #define REQ_DRV (1ULL << __REQ_DRV)
  #define REQ_SWAP		(1ULL << __REQ_SWAP)
+#define REQ_INTERNAL		(1ULL << __REQ_INTERNAL)
#define REQ_FAILFAST_MASK \
  	(REQ_FAILFAST_DEV | REQ_FAILFAST_TRANSPORT | REQ_FAILFAST_DRIVER)
.





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux