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>master
parent
483cbec342
commit
581cf833ca
|
|
@ -475,9 +475,17 @@ void rnbd_clt_remove_dev_symlink(struct rnbd_clt_dev *dev)
|
|||
}
|
||||
}
|
||||
|
||||
static void rnbd_dev_release(struct kobject *kobj)
|
||||
{
|
||||
struct rnbd_clt_dev *dev = container_of(kobj, struct rnbd_clt_dev, kobj);
|
||||
|
||||
kfree(dev);
|
||||
}
|
||||
|
||||
static const struct kobj_type rnbd_dev_ktype = {
|
||||
.sysfs_ops = &kobj_sysfs_ops,
|
||||
.default_groups = rnbd_dev_groups,
|
||||
.release = rnbd_dev_release,
|
||||
};
|
||||
|
||||
static int rnbd_clt_add_dev_kobj(struct rnbd_clt_dev *dev)
|
||||
|
|
|
|||
|
|
@ -60,7 +60,9 @@ static void rnbd_clt_put_dev(struct rnbd_clt_dev *dev)
|
|||
kfree(dev->pathname);
|
||||
rnbd_clt_put_sess(dev->sess);
|
||||
mutex_destroy(&dev->lock);
|
||||
kfree(dev);
|
||||
|
||||
if (dev->kobj.state_initialized)
|
||||
kobject_put(&dev->kobj);
|
||||
}
|
||||
|
||||
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)
|
|||
return found;
|
||||
}
|
||||
|
||||
static void delete_dev(struct rnbd_clt_dev *dev)
|
||||
static void rnbd_delete_dev(struct rnbd_clt_dev *dev)
|
||||
{
|
||||
struct rnbd_clt_session *sess = dev->sess;
|
||||
|
||||
|
|
@ -1638,7 +1640,7 @@ put_iu:
|
|||
kfree(rsp);
|
||||
rnbd_put_iu(sess, iu);
|
||||
del_dev:
|
||||
delete_dev(dev);
|
||||
rnbd_delete_dev(dev);
|
||||
put_dev:
|
||||
rnbd_clt_put_dev(dev);
|
||||
put_sess:
|
||||
|
|
@ -1647,13 +1649,13 @@ put_sess:
|
|||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
static void destroy_gen_disk(struct rnbd_clt_dev *dev)
|
||||
static void rnbd_destroy_gen_disk(struct rnbd_clt_dev *dev)
|
||||
{
|
||||
del_gendisk(dev->gd);
|
||||
put_disk(dev->gd);
|
||||
}
|
||||
|
||||
static void destroy_sysfs(struct rnbd_clt_dev *dev,
|
||||
static void rnbd_destroy_sysfs(struct rnbd_clt_dev *dev,
|
||||
const struct attribute *sysfs_self)
|
||||
{
|
||||
rnbd_clt_remove_dev_symlink(dev);
|
||||
|
|
@ -1691,9 +1693,9 @@ int rnbd_clt_unmap_device(struct rnbd_clt_dev *dev, bool force,
|
|||
dev->dev_state = DEV_STATE_UNMAPPED;
|
||||
mutex_unlock(&dev->lock);
|
||||
|
||||
delete_dev(dev);
|
||||
destroy_sysfs(dev, sysfs_self);
|
||||
destroy_gen_disk(dev);
|
||||
rnbd_delete_dev(dev);
|
||||
rnbd_destroy_sysfs(dev, sysfs_self);
|
||||
rnbd_destroy_gen_disk(dev);
|
||||
if (was_mapped && sess->rtrs)
|
||||
send_msg_close(dev, dev->device_id, RTRS_PERMIT_WAIT);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue