|
@@ -1269,6 +1269,7 @@ static int tcmu_open(struct uio_info *info, struct inode *inode)
|
|
|
return -EBUSY;
|
|
|
|
|
|
udev->inode = inode;
|
|
|
+ kref_get(&udev->kref);
|
|
|
|
|
|
pr_debug("open\n");
|
|
|
|
|
@@ -1300,7 +1301,7 @@ static int tcmu_release(struct uio_info *info, struct inode *inode)
|
|
|
clear_bit(TCMU_DEV_BIT_OPEN, &udev->flags);
|
|
|
|
|
|
pr_debug("close\n");
|
|
|
- /* release ref from configure */
|
|
|
+ /* release ref from open */
|
|
|
kref_put(&udev->kref, tcmu_dev_kref_release);
|
|
|
return 0;
|
|
|
}
|
|
@@ -1596,6 +1597,9 @@ static void tcmu_destroy_device(struct se_device *dev)
|
|
|
tcmu_netlink_event(udev, TCMU_CMD_REMOVED_DEVICE, 0, NULL);
|
|
|
|
|
|
uio_unregister_device(&udev->uio_info);
|
|
|
+
|
|
|
+ /* release ref from configure */
|
|
|
+ kref_put(&udev->kref, tcmu_dev_kref_release);
|
|
|
}
|
|
|
|
|
|
enum {
|