There is a kobject_add() hidden in the call to kobject_add(). ret = kobject_add(q->mq_kobj, kobject_get(&dev->kobj), "%s", "mq"); ^^^^^^^^^^^^^^^^^^^^^^^ It needs to be release on the error path. Fixes: 320ae51feed5 ("blk-mq: new multi-queue block IO queueing mechanism") Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> --- block/blk-mq-sysfs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c index 062229395a50..5a63659163c1 100644 --- a/block/blk-mq-sysfs.c +++ b/block/blk-mq-sysfs.c @@ -321,7 +321,7 @@ int __blk_mq_register_dev(struct device *dev, struct request_queue *q) ret = kobject_add(q->mq_kobj, kobject_get(&dev->kobj), "%s", "mq"); if (ret < 0) - goto out; + goto out_kobj; kobject_uevent(q->mq_kobj, KOBJ_ADD); @@ -333,8 +333,7 @@ int __blk_mq_register_dev(struct device *dev, struct request_queue *q) q->mq_sysfs_init_done = true; -out: - return ret; + return 0; unreg: while (--i >= 0) @@ -342,6 +341,7 @@ int __blk_mq_register_dev(struct device *dev, struct request_queue *q) kobject_uevent(q->mq_kobj, KOBJ_REMOVE); kobject_del(q->mq_kobj); +out_kobj: kobject_put(&dev->kobj); return ret; } -- 2.28.0