Commit 581cf833 authored by Zhu Yanjun's avatar Zhu Yanjun Committed by Jens Axboe
Browse files

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: default avatarZhu Yanjun <yanjun.zhu@linux.dev>
Reviewed-by: default avatarMd Haris Iqbal <haris.iqbal@ionos.com>
Signed-off-by: default avatarGrzegorz Prajsner <grzegorz.prajsner@ionos.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 483cbec3
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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)
+10 −8
Original line number Diff line number Diff line
@@ -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 @@ struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
	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 @@ struct rnbd_clt_dev *rnbd_clt_map_device(const char *sessname,
	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);