diff mbox series

[v3,3/9] block: Introduce blk_rq_is_seq_zoned_write()

Message ID 20230424203329.2369688-4-bvanassche@acm.org (mailing list archive)
State New, archived
Headers show
Series mq-deadline: Improve support for zoned block devices | expand

Commit Message

Bart Van Assche April 24, 2023, 8:33 p.m. UTC
Introduce the function blk_rq_is_seq_zoned_write(). This function will
be used in later patches to preserve the order of zoned writes for which
the order needs to be preserved.

Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 block/blk-zoned.c      | 22 +++++++++++++++++++---
 include/linux/blk-mq.h |  6 ++++++
 2 files changed, 25 insertions(+), 3 deletions(-)

Comments

Christoph Hellwig April 28, 2023, 5:45 a.m. UTC | #1
> + */
> +bool blk_rq_is_seq_zoned_write(struct request *rq)
> +{
> +	switch (req_op(rq)) {
> +	case REQ_OP_WRITE:
> +	case REQ_OP_WRITE_ZEROES:
> +		return blk_rq_zone_is_seq(rq);

This would be another use for op_is_zoned_write..

>  bool blk_req_needs_zone_write_lock(struct request *rq)
>  {
>  	return rq->q->disk->seq_zones_wlock &&
> -		(req_op(rq) == REQ_OP_WRITE ||
> -		 req_op(rq) == REQ_OP_WRITE_ZEROES) &&
> -		blk_rq_zone_is_seq(rq);
> +		blk_rq_is_seq_zoned_write(rq);
>  }

.. and given that this just reshuffles the previous patch it might
make sense to just move it before that.
Bart Van Assche April 28, 2023, 7:59 p.m. UTC | #2
On 4/27/23 22:45, Christoph Hellwig wrote:
>>   bool blk_req_needs_zone_write_lock(struct request *rq)
>>   {
>>   	return rq->q->disk->seq_zones_wlock &&
>> -		(req_op(rq) == REQ_OP_WRITE ||
>> -		 req_op(rq) == REQ_OP_WRITE_ZEROES) &&
>> -		blk_rq_zone_is_seq(rq);
>> +		blk_rq_is_seq_zoned_write(rq);
>>   }
> 
> .. and given that this just reshuffles the previous patch it might
> make sense to just move it before that.

Hi Christoph,

I will move this patch in front of the micro-optimization patch.

Thanks,

Bart.
diff mbox series

Patch

diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index 4640b75ae66f..78c39fc505bc 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -52,15 +52,31 @@  const char *blk_zone_cond_str(enum blk_zone_cond zone_cond)
 }
 EXPORT_SYMBOL_GPL(blk_zone_cond_str);
 
+/**
+ * blk_rq_is_seq_zoned_write() - Check if @rq requires write serialization.
+ * @rq: Request to examine.
+ *
+ * Note: REQ_OP_ZONE_APPEND requests do not require serialization.
+ */
+bool blk_rq_is_seq_zoned_write(struct request *rq)
+{
+	switch (req_op(rq)) {
+	case REQ_OP_WRITE:
+	case REQ_OP_WRITE_ZEROES:
+		return blk_rq_zone_is_seq(rq);
+	default:
+		return false;
+	}
+}
+EXPORT_SYMBOL_GPL(blk_rq_is_seq_zoned_write);
+
 /*
  * Return true if a request is a write requests that needs zone write locking.
  */
 bool blk_req_needs_zone_write_lock(struct request *rq)
 {
 	return rq->q->disk->seq_zones_wlock &&
-		(req_op(rq) == REQ_OP_WRITE ||
-		 req_op(rq) == REQ_OP_WRITE_ZEROES) &&
-		blk_rq_zone_is_seq(rq);
+		blk_rq_is_seq_zoned_write(rq);
 }
 EXPORT_SYMBOL_GPL(blk_req_needs_zone_write_lock);
 
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h
index 06caacd77ed6..e498b85bc470 100644
--- a/include/linux/blk-mq.h
+++ b/include/linux/blk-mq.h
@@ -1164,6 +1164,7 @@  static inline unsigned int blk_rq_zone_is_seq(struct request *rq)
 	return disk_zone_is_seq(rq->q->disk, blk_rq_pos(rq));
 }
 
+bool blk_rq_is_seq_zoned_write(struct request *rq);
 bool blk_req_needs_zone_write_lock(struct request *rq);
 bool blk_req_zone_write_trylock(struct request *rq);
 void __blk_req_zone_write_lock(struct request *rq);
@@ -1194,6 +1195,11 @@  static inline bool blk_req_can_dispatch_to_zone(struct request *rq)
 	return !blk_req_zone_is_write_locked(rq);
 }
 #else /* CONFIG_BLK_DEV_ZONED */
+static inline bool blk_rq_is_seq_zoned_write(struct request *rq)
+{
+	return false;
+}
+
 static inline bool blk_req_needs_zone_write_lock(struct request *rq)
 {
 	return false;