loop: mutex already unlocked in loop_clr_fd()
mount/1865 is trying to release lock (&lo->lo_ctl_mutex) at: but there are no more locks to release! mutex is already unlocked in loop_clr_fd(), we should not try to unlock it in lo_release() again. Signed-off-by: Alexander Beregalov <a.beregalov@gmail.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
b029195dda
commit
ffcd7dca3a
@ -1431,6 +1431,7 @@ static int lo_open(struct block_device *bdev, fmode_t mode)
|
|||||||
static int lo_release(struct gendisk *disk, fmode_t mode)
|
static int lo_release(struct gendisk *disk, fmode_t mode)
|
||||||
{
|
{
|
||||||
struct loop_device *lo = disk->private_data;
|
struct loop_device *lo = disk->private_data;
|
||||||
|
int err;
|
||||||
|
|
||||||
mutex_lock(&lo->lo_ctl_mutex);
|
mutex_lock(&lo->lo_ctl_mutex);
|
||||||
|
|
||||||
@ -1442,7 +1443,9 @@ static int lo_release(struct gendisk *disk, fmode_t mode)
|
|||||||
* In autoclear mode, stop the loop thread
|
* In autoclear mode, stop the loop thread
|
||||||
* and remove configuration after last close.
|
* and remove configuration after last close.
|
||||||
*/
|
*/
|
||||||
loop_clr_fd(lo, NULL);
|
err = loop_clr_fd(lo, NULL);
|
||||||
|
if (!err)
|
||||||
|
goto out_unlocked;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* Otherwise keep thread (if running) and config,
|
* Otherwise keep thread (if running) and config,
|
||||||
@ -1453,7 +1456,7 @@ static int lo_release(struct gendisk *disk, fmode_t mode)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&lo->lo_ctl_mutex);
|
mutex_unlock(&lo->lo_ctl_mutex);
|
||||||
|
out_unlocked:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user