summaryrefslogtreecommitdiff
path: root/include/linux/blkdev.h
diff options
context:
space:
mode:
authorNilay Shroff <nilay@linux.ibm.com>2025-03-06 15:09:53 +0530
committerJens Axboe <axboe@kernel.dk>2025-03-10 07:31:06 -0600
commit5abba4cebec0a591ca7e7f55701e42cd5dc059af (patch)
tree4a316ee6217a9ac1ab559b040508d94ef077c75d /include/linux/blkdev.h
parent5e40f4452dc9a3fb44d13bb6bc7032f3911a2675 (diff)
block: protect hctx attributes/params using q->elevator_lock
Currently, hctx attributes (nr_tags, nr_reserved_tags, and cpu_list) are protected using `q->sysfs_lock`. However, these attributes can be updated in multiple scenarios: - During the driver's probe method. - When updating nr_hw_queues. - When writing to the sysfs attribute nr_requests, which can modify nr_tags. The nr_requests attribute is already protected using q->elevator_lock, but none of the update paths actually use q->sysfs_lock to protect hctx attributes. So to ensure proper synchronization, replace q->sysfs_lock with q->elevator_lock when reading hctx attributes through sysfs. Additionally, blk_mq_update_nr_hw_queues allocates and updates hctx. The allocation of hctx is protected using q->elevator_lock, however, updating hctx params happens without any protection, so safeguard hctx param update path by also using q->elevator_lock. Signed-off-by: Nilay Shroff <nilay@linux.ibm.com> Link: https://lore.kernel.org/r/20250306093956.2818808-1-nilay@linux.ibm.com [axboe: wrap comment at 80 chars] Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/blkdev.h')
-rw-r--r--include/linux/blkdev.h14
1 files changed, 8 insertions, 6 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 3bee1b4858b6..dcf8fce15e23 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -561,12 +561,14 @@ struct request_queue {
struct list_head flush_list;
/*
- * Protects against I/O scheduler switching, particularly when
- * updating q->elevator. Since the elevator update code path may
- * also modify q->nr_requests and wbt latency, this lock also
- * protects the sysfs attributes nr_requests and wbt_lat_usec.
- * To ensure proper locking order during an elevator update, first
- * freeze the queue, then acquire ->elevator_lock.
+ * Protects against I/O scheduler switching, particularly when updating
+ * q->elevator. Since the elevator update code path may also modify q->
+ * nr_requests and wbt latency, this lock also protects the sysfs attrs
+ * nr_requests and wbt_lat_usec. Additionally the nr_hw_queues update
+ * may modify hctx tags, reserved-tags and cpumask, so this lock also
+ * helps protect the hctx attrs. To ensure proper locking order during
+ * an elevator or nr_hw_queue update, first freeze the queue, then
+ * acquire ->elevator_lock.
*/
struct mutex elevator_lock;