[PATCH OLK-5.10 0/2] block: fix bugs in blk_register_queue()

Patch 2 aims to fix bug caused in patch 1. Zheng Qixing (2): block: fix resource leak in elevator registration error path block: fix lock ordering in blk_register_queue() error path block/blk-sysfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -- 2.39.2

hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IBWSWQ -------------------------------- When elevator registration via elv_register_queue() fails in blk_register_queue(), we were not calling blk_mq_unregister_dev() to clean up multi-queue resources that were registered by __blk_mq_register_dev(). This omission could lead to kobject leaks and disk->queue remaining in memory when device registration ultimately fails. Add the missing blk_mq_unregister_dev() call in the error path to ensure complete cleanup of all resources in the failure case. Fixes: 320ae51feed5 ("blk-mq: new multi-queue block IO queueing mechanism") Signed-off-by: Zheng Qixing <zhengqixing@huawei.com> --- block/blk-sysfs.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index 078aace75204..5ff510a13b68 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c @@ -990,6 +990,8 @@ int blk_register_queue(struct gendisk *disk) if (ret) { mutex_unlock(&q->sysfs_lock); mutex_unlock(&q->sysfs_dir_lock); + if (queue_is_mq(q)) + blk_mq_unregister_dev(dev, q); kobject_del(&q->kobj); blk_trace_remove_sysfs(dev); kobject_put(&dev->kobj); -- 2.39.2

hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IC0KIA -------------------------------- The error path in blk_register_queue() when elv_register_queue() fails was releasing q->sysfs_dir_lock too early, before calling blk_mq_unregister_dev() to release dev resources. This incorrect order caused lockdep warnings. Move the mutex_unlock(&q->sysfs_dir_lock) to the end of the error handling sequence to ensure the lock remains held during all cleanup operations, preventing potential race conditions. Fixes: 59ed4a531cc4 ("block: fix resource leak in elevator registration error path") Signed-off-by: Zheng Qixing <zhengqixing@huawei.com> --- block/blk-sysfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c index 5ff510a13b68..522ad742ed45 100644 --- a/block/blk-sysfs.c +++ b/block/blk-sysfs.c @@ -989,12 +989,12 @@ int blk_register_queue(struct gendisk *disk) ret = elv_register_queue(q, false); if (ret) { mutex_unlock(&q->sysfs_lock); - mutex_unlock(&q->sysfs_dir_lock); if (queue_is_mq(q)) blk_mq_unregister_dev(dev, q); kobject_del(&q->kobj); blk_trace_remove_sysfs(dev); kobject_put(&dev->kobj); + mutex_unlock(&q->sysfs_dir_lock); return ret; } } -- 2.39.2

反馈: 您发送到kernel@openeuler.org的补丁/补丁集,已成功转换为PR! PR链接地址: https://gitee.com/openeuler/kernel/pulls/15840 邮件列表地址:https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/QLR... FeedBack: The patch(es) which you have sent to kernel@openeuler.org mailing list has been converted to a pull request successfully! Pull request link: https://gitee.com/openeuler/kernel/pulls/15840 Mailing list address: https://mailweb.openeuler.org/archives/list/kernel@openeuler.org/message/QLR...
participants (2)
-
patchwork bot
-
Zheng Qixing