lkml.org 
[lkml]   [2007]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [PATCH] Replace obscure constructs in fs/block_dev.c
Hi,

please ignore the last revision of this patch. There were some places where
semantics where changed instead of just presentation. Also the bd_claim()
'fixup' was reverted, due to a misunderstanding of the code.


This patch replaces some funky codepaths in fs/block_dev.c with cleaner
versions of the affected places.

Signed-off-by: Johannes Weiner <hannes-kernel@saeurebad.de>
diff --git a/fs/block_dev.c b/fs/block_dev.c
index ea1480a..710de2f 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -874,7 +874,7 @@ static struct bd_holder *find_bd_holder(struct block_device *bdev,
*/
static int add_bd_holder(struct block_device *bdev, struct bd_holder *bo)
{
- int ret;
+ int err;

if (!bo)
return -EINVAL;
@@ -882,15 +882,18 @@ static int add_bd_holder(struct block_device *bdev, struct bd_holder *bo)
if (!bd_holder_grab_dirs(bdev, bo))
return -EBUSY;

- ret = add_symlink(bo->sdir, bo->sdev);
- if (ret == 0) {
- ret = add_symlink(bo->hdir, bo->hdev);
- if (ret)
- del_symlink(bo->sdir, bo->sdev);
+ err = add_symlink(bo->sdir, bo->sdev);
+ if (err)
+ return err;
+
+ err = add_symlink(bo->hdir, bo->hdev);
+ if (err) {
+ del_symlink(bo->sdir, bo->sdev);
+ return err;
}
- if (ret == 0)
- list_add_tail(&bo->list, &bdev->bd_holder_list);
- return ret;
+
+ list_add_tail(&bo->list, &bdev->bd_holder_list);
+ return err;
}

/**
@@ -948,7 +951,7 @@ static struct bd_holder *del_bd_holder(struct block_device *bdev,
static int bd_claim_by_kobject(struct block_device *bdev, void *holder,
struct kobject *kobj)
{
- int res;
+ int err;
struct bd_holder *bo, *found;

if (!kobj)
@@ -959,21 +962,24 @@ static int bd_claim_by_kobject(struct block_device *bdev, void *holder,
return -ENOMEM;

mutex_lock(&bdev->bd_mutex);
- res = bd_claim(bdev, holder);
- if (res == 0) {
- found = find_bd_holder(bdev, bo);
- if (found == NULL) {
- res = add_bd_holder(bdev, bo);
- if (res)
- bd_release(bdev);
- }
- }

- if (res || found)
+ err = bd_claim(bdev, holder);
+ if (err)
+ goto out;
+
+ found = find_bd_holder(bdev, bo);
+ if (found)
+ goto out;
+
+ err = add_bd_holder(bdev, bo);
+ if (err)
+ bd_release(bdev);
+
+out:
+ if (err || found)
free_bd_holder(bo);
mutex_unlock(&bdev->bd_mutex);
-
- return res;
+ return err;
}

/**
\
 
 \ /
  Last update: 2007-06-17 17:45    [W:0.041 / U:1.224 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site