Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Zhu Yanjun and committed by
Jens Axboe
581cf833 483cbec3

+18 -8
+8
drivers/block/rnbd/rnbd-clt-sysfs.c
··· 475 475 } 476 476 } 477 477 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 + 478 485 static const struct kobj_type rnbd_dev_ktype = { 479 486 .sysfs_ops = &kobj_sysfs_ops, 480 487 .default_groups = rnbd_dev_groups, 488 + .release = rnbd_dev_release, 481 489 }; 482 490 483 491 static int rnbd_clt_add_dev_kobj(struct rnbd_clt_dev *dev)
+10 -8
drivers/block/rnbd/rnbd-clt.c
··· 60 60 kfree(dev->pathname); 61 61 rnbd_clt_put_sess(dev->sess); 62 62 mutex_destroy(&dev->lock); 63 - kfree(dev); 63 + 64 + if (dev->kobj.state_initialized) 65 + kobject_put(&dev->kobj); 64 66 } 65 67 66 68 static inline bool rnbd_clt_get_dev(struct rnbd_clt_dev *dev) ··· 1519 1517 return found; 1520 1518 } 1521 1519 1522 - static void delete_dev(struct rnbd_clt_dev *dev) 1520 + static void rnbd_delete_dev(struct rnbd_clt_dev *dev) 1523 1521 { 1524 1522 struct rnbd_clt_session *sess = dev->sess; 1525 1523 ··· 1640 1638 kfree(rsp); 1641 1639 rnbd_put_iu(sess, iu); 1642 1640 del_dev: 1643 - delete_dev(dev); 1641 + rnbd_delete_dev(dev); 1644 1642 put_dev: 1645 1643 rnbd_clt_put_dev(dev); 1646 1644 put_sess: ··· 1649 1647 return ERR_PTR(ret); 1650 1648 } 1651 1649 1652 - static void destroy_gen_disk(struct rnbd_clt_dev *dev) 1650 + static void rnbd_destroy_gen_disk(struct rnbd_clt_dev *dev) 1653 1651 { 1654 1652 del_gendisk(dev->gd); 1655 1653 put_disk(dev->gd); 1656 1654 } 1657 1655 1658 - static void destroy_sysfs(struct rnbd_clt_dev *dev, 1656 + static void rnbd_destroy_sysfs(struct rnbd_clt_dev *dev, 1659 1657 const struct attribute *sysfs_self) 1660 1658 { 1661 1659 rnbd_clt_remove_dev_symlink(dev); ··· 1693 1691 dev->dev_state = DEV_STATE_UNMAPPED; 1694 1692 mutex_unlock(&dev->lock); 1695 1693 1696 - delete_dev(dev); 1697 - destroy_sysfs(dev, sysfs_self); 1698 - destroy_gen_disk(dev); 1694 + rnbd_delete_dev(dev); 1695 + rnbd_destroy_sysfs(dev, sysfs_self); 1696 + rnbd_destroy_gen_disk(dev); 1699 1697 if (was_mapped && sess->rtrs) 1700 1698 send_msg_close(dev, dev->device_id, RTRS_PERMIT_WAIT); 1701 1699