summaryrefslogtreecommitdiffstats
path: root/fs/block_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/block_dev.c')
-rw-r--r--fs/block_dev.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 75c47a21b2f0..3635315e3b99 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -963,20 +963,20 @@ static int bd_claim_by_kobject(struct block_device *bdev, void *holder,
err = bd_claim(bdev, holder);
if (err)
- goto out;
+ goto fail;
found = find_bd_holder(bdev, bo);
if (found)
- goto out;
+ goto fail;
err = add_bd_holder(bdev, bo);
if (err)
bd_release(bdev);
-
-out:
- if (err || found)
- free_bd_holder(bo);
+ else
+ bo = NULL;
+fail:
mutex_unlock(&bdev->bd_mutex);
+ free_bd_holder(bo);
return err;
}
@@ -991,15 +991,12 @@ out:
static void bd_release_from_kobject(struct block_device *bdev,
struct kobject *kobj)
{
- struct bd_holder *bo;
-
if (!kobj)
return;
mutex_lock(&bdev->bd_mutex);
bd_release(bdev);
- if ((bo = del_bd_holder(bdev, kobj)))
- free_bd_holder(bo);
+ free_bd_holder(del_bd_holder(bdev, kobj));
mutex_unlock(&bdev->bd_mutex);
}