Re: [PATCH 04/10] block: use queue_limits_commit_update in queue_attr_store

Damien Le Moal
2025-01-06T10:49:01Z

On 1/6/25 7:06 PM, Christoph Hellwig wrote:
> Use queue_limits_commit_update to apply a consistent freeze vs limits
> lock order in queue_attr_store. Also remove taking the sysfs lock
> as it doesn't protect anything here.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Oops. OK. so please disregard my comments on patch 3. This is all fixed here.
May be sqash this patch with patch 3 ?

> ---
> block/blk-sysfs.c | 18 ++++++++++--------
> 1 file changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
> index 8d69315e986d..3bac27fcd635 100644
> --- a/block/blk-sysfs.c
> +++ b/block/blk-sysfs.c
> @@ -687,22 +687,24 @@ queue_attr_store(struct kobject *kobj, struct attribute *attr,
> if (entry->load_module)
> entry->load_module(disk, page, length);
>
> - mutex_lock(&q->sysfs_lock);
> - blk_mq_freeze_queue(q);
> if (entry->store_limit) {
> struct queue_limits lim = queue_limits_start_update(q);
>
> res = entry->store_limit(disk, page, length, &lim);
> if (res < 0) {
> queue_limits_cancel_update(q);
> - } else {
> - res = queue_limits_commit_update(q, &lim);
> - if (!res)
> - res = length;
> + return res;
> }
> - } else {
> - res = entry->store(disk, page, length);
> +
> + res = queue_limits_commit_update_frozen(q, &lim);
> + if (res)
> + return res;
> + return length;
> }
> +
> + mutex_lock(&q->sysfs_lock);
> + blk_mq_freeze_queue(q);
> + res = entry->store(disk, page, length);
> blk_mq_unfreeze_queue(q);
> mutex_unlock(&q->sysfs_lock);
> return res;

--
Damien Le Moal
Western Digital Research