diff options
author | Alexander Beregalov <a.beregalov@gmail.com> | 2009-04-07 07:48:21 -0400 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-04-07 07:48:21 -0400 |
commit | ffcd7dca3ab78f9f425971756e5e90024157f6be (patch) | |
tree | 777753013a09b5de8938a9b1af1c1b6ac5147635 | |
parent | b029195dda0129b427c6e579a3bb3ae752da3a93 (diff) |
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>
-rw-r--r-- | drivers/block/loop.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/block/loop.c b/drivers/block/loop.c index 40b17d3b55a1..ddae80825899 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c | |||
@@ -1431,6 +1431,7 @@ static int lo_open(struct block_device *bdev, fmode_t mode) | |||
1431 | static int lo_release(struct gendisk *disk, fmode_t mode) | 1431 | static int lo_release(struct gendisk *disk, fmode_t mode) |
1432 | { | 1432 | { |
1433 | struct loop_device *lo = disk->private_data; | 1433 | struct loop_device *lo = disk->private_data; |
1434 | int err; | ||
1434 | 1435 | ||
1435 | mutex_lock(&lo->lo_ctl_mutex); | 1436 | mutex_lock(&lo->lo_ctl_mutex); |
1436 | 1437 | ||
@@ -1442,7 +1443,9 @@ static int lo_release(struct gendisk *disk, fmode_t mode) | |||
1442 | * In autoclear mode, stop the loop thread | 1443 | * In autoclear mode, stop the loop thread |
1443 | * and remove configuration after last close. | 1444 | * and remove configuration after last close. |
1444 | */ | 1445 | */ |
1445 | loop_clr_fd(lo, NULL); | 1446 | err = loop_clr_fd(lo, NULL); |
1447 | if (!err) | ||
1448 | goto out_unlocked; | ||
1446 | } else { | 1449 | } else { |
1447 | /* | 1450 | /* |
1448 | * Otherwise keep thread (if running) and config, | 1451 | * Otherwise keep thread (if running) and config, |
@@ -1453,7 +1456,7 @@ static int lo_release(struct gendisk *disk, fmode_t mode) | |||
1453 | 1456 | ||
1454 | out: | 1457 | out: |
1455 | mutex_unlock(&lo->lo_ctl_mutex); | 1458 | mutex_unlock(&lo->lo_ctl_mutex); |
1456 | 1459 | out_unlocked: | |
1457 | return 0; | 1460 | return 0; |
1458 | } | 1461 | } |
1459 | 1462 | ||