|
@@ -1581,9 +1581,8 @@ out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static void lo_release(struct gendisk *disk, fmode_t mode)
|
|
|
+static void __lo_release(struct loop_device *lo)
|
|
|
{
|
|
|
- struct loop_device *lo = disk->private_data;
|
|
|
int err;
|
|
|
|
|
|
if (atomic_dec_return(&lo->lo_refcnt))
|
|
@@ -1610,6 +1609,13 @@ static void lo_release(struct gendisk *disk, fmode_t mode)
|
|
|
mutex_unlock(&lo->lo_ctl_mutex);
|
|
|
}
|
|
|
|
|
|
+static void lo_release(struct gendisk *disk, fmode_t mode)
|
|
|
+{
|
|
|
+ mutex_lock(&loop_index_mutex);
|
|
|
+ __lo_release(disk->private_data);
|
|
|
+ mutex_unlock(&loop_index_mutex);
|
|
|
+}
|
|
|
+
|
|
|
static const struct block_device_operations lo_fops = {
|
|
|
.owner = THIS_MODULE,
|
|
|
.open = lo_open,
|