> From: Jason Gunthorpe <jgg@xxxxxxxxxx> > Sent: Saturday, October 2, 2021 7:22 AM > [...] > +static void vfio_group_release(struct device *dev) > { > - struct vfio_group *group, *existing_group; > - struct device *dev; > - int ret, minor; > + struct vfio_group *group = container_of(dev, struct vfio_group, dev); > + struct vfio_unbound_dev *unbound, *tmp; > + > + list_for_each_entry_safe(unbound, tmp, > + &group->unbound_list, unbound_next) { > + list_del(&unbound->unbound_next); > + kfree(unbound); > + } move to vfio_group_put()? this is not paired with vfio_group_alloc()... [...] > static int vfio_group_fops_open(struct inode *inode, struct file *filep) > { > - struct vfio_group *group; > + struct vfio_group *group = > + container_of(inode->i_cdev, struct vfio_group, cdev); > int opened; A curiosity question. According to cdev_device_del() any cdev already open will remain with their fops callable. What prevents vfio_group from being released after cdev_device_del() has been called? Is it because cdev open will hold a reference to device thus put_device() will not hit zero in vfio_group_put()? Thanks Kevin