aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
authorDamien Le Moal <dlemoal@kernel.org>2026-02-27 22:19:50 +0900
committerJens Axboe <axboe@kernel.dk>2026-03-09 14:30:00 -0600
commit3d9782f62fb7c2c9ec3020c579425d634559d600 (patch)
tree77b6af2413b51afa5fb808bec7305b8b82f16689 /block
parent1365b6904fd050bf22ab9f3df375a396de5837a1 (diff)
downloadath-3d9782f62fb7c2c9ec3020c579425d634559d600.tar.gz
block: default to QD=1 writes for blk-mq rotational zoned devices
For blk-mq rotational zoned block devices (e.g. SMR HDDs), default to having zone write plugging limit write operations to a maximum queue depth of 1 for all zones. This significantly reduce write seek overhead and improves SMR HDD write throughput. For remotely connected disks with a very high network latency this features might not be useful. However, remotely connected zoned devices are rare at the moment, and we cannot know the round trip latency to pick a good default for network attached devices. System administrators can however disable this feature in that case. For BIO based (non blk-mq) rotational zoned block devices, the device driver (e.g. a DM target driver) can directly set an appropriate default. Signed-off-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block')
-rw-r--r--block/blk-sysfs.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
index ca8033e6d6990..878b8a4b55bb6 100644
--- a/block/blk-sysfs.c
+++ b/block/blk-sysfs.c
@@ -967,6 +967,14 @@ int blk_register_queue(struct gendisk *disk)
blk_mq_debugfs_register(q);
blk_debugfs_unlock(q, memflags);
+ /*
+ * For blk-mq rotational zoned devices, default to using QD=1
+ * writes. For non-mq rotational zoned devices, the device driver can
+ * set an appropriate default.
+ */
+ if (queue_is_mq(q) && blk_queue_rot(q) && blk_queue_is_zoned(q))
+ blk_queue_flag_set(QUEUE_FLAG_ZONED_QD1_WRITES, q);
+
ret = disk_register_independent_access_ranges(disk);
if (ret)
goto out_debugfs_remove;