Skip to content

Commit 581cf83

Browse files
zhuyjaxboe
authored andcommitted
block: rnbd: add .release to rnbd_dev_ktype
Every ktype must provides a .release function that will be called after the last kobject_put. Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev> Reviewed-by: Md Haris Iqbal <haris.iqbal@ionos.com> Signed-off-by: Grzegorz Prajsner <grzegorz.prajsner@ionos.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 483cbec commit 581cf83

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

drivers/block/rnbd/rnbd-clt-sysfs.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,9 +475,17 @@ void rnbd_clt_remove_dev_symlink(struct rnbd_clt_dev *dev)
475475
}
476476
}
477477

478+
static void rnbd_dev_release(struct kobject *kobj)
479+
{
480+
struct rnbd_clt_dev *dev = container_of(kobj, struct rnbd_clt_dev, kobj);
481+
482+
kfree(dev);
483+
}
484+
478485
static const struct kobj_type rnbd_dev_ktype = {
479486
.sysfs_ops = &kobj_sysfs_ops,
480487
.default_groups = rnbd_dev_groups,
488+
.release = rnbd_dev_release,
481489
};
482490

483491
static int rnbd_clt_add_dev_kobj(struct rnbd_clt_dev *dev)

drivers/block/rnbd/rnbd-clt.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ static void rnbd_clt_put_dev(struct rnbd_clt_dev *dev)
6060
kfree(dev->pathname);
6161
rnbd_clt_put_sess(dev->sess);
6262
mutex_destroy(&dev->lock);
63-
kfree(dev);
63+
64+
if (dev->kobj.state_initialized)
65+
kobject_put(&dev->kobj);
6466
}
6567

6668
static inline bool rnbd_clt_get_dev(struct rnbd_clt_dev *dev)
@@ -1517,7 +1519,7 @@ static bool insert_dev_if_not_exists_devpath(struct rnbd_clt_dev *dev)
15171519
return found;
15181520
}
15191521

1520-
static void delete_dev(struct rnbd_clt_dev *dev)
1522+
static void rnbd_delete_dev(struct rnbd_clt_dev *dev)
15211523
{
15221524
struct rnbd_clt_session *sess = dev->sess;
15231525

@@ -1638,7 +1640,7 @@ struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
16381640
kfree(rsp);
16391641
rnbd_put_iu(sess, iu);
16401642
del_dev:
1641-
delete_dev(dev);
1643+
rnbd_delete_dev(dev);
16421644
put_dev:
16431645
rnbd_clt_put_dev(dev);
16441646
put_sess:
@@ -1647,13 +1649,13 @@ struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
16471649
return ERR_PTR(ret);
16481650
}
16491651

1650-
static void destroy_gen_disk(struct rnbd_clt_dev *dev)
1652+
static void rnbd_destroy_gen_disk(struct rnbd_clt_dev *dev)
16511653
{
16521654
del_gendisk(dev->gd);
16531655
put_disk(dev->gd);
16541656
}
16551657

1656-
static void destroy_sysfs(struct rnbd_clt_dev *dev,
1658+
static void rnbd_destroy_sysfs(struct rnbd_clt_dev *dev,
16571659
const struct attribute *sysfs_self)
16581660
{
16591661
rnbd_clt_remove_dev_symlink(dev);
@@ -1691,9 +1693,9 @@ int rnbd_clt_unmap_device(struct rnbd_clt_dev *dev, bool force,
16911693
dev->dev_state = DEV_STATE_UNMAPPED;
16921694
mutex_unlock(&dev->lock);
16931695

1694-
delete_dev(dev);
1695-
destroy_sysfs(dev, sysfs_self);
1696-
destroy_gen_disk(dev);
1696+
rnbd_delete_dev(dev);
1697+
rnbd_destroy_sysfs(dev, sysfs_self);
1698+
rnbd_destroy_gen_disk(dev);
16971699
if (was_mapped && sess->rtrs)
16981700
send_msg_close(dev, dev->device_id, RTRS_PERMIT_WAIT);
16991701

0 commit comments

Comments
 (0)