UBIFS: fix error path in dbg_debugfs_init_fs
Artem Bityutskiy [Fri, 1 Apr 2011 07:16:17 +0000 (10:16 +0300)]
The debug interface is substandard and on error returns either
NULL or an error code packed in the pointer. So using "IS_ERR"
for the pointers returned by debugfs function is incorrect.
Instead, we should use IS_ERR_OR_NULL.

This path is an improved vestion of the original patch from
Phil Carmody.

Reported-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Acked-by: Phil Carmody <ext-phil.2.carmody@nokia.com>

fs/ubifs/debug.c

index 304cc6e..6457377 100644 (file)
@@ -2808,25 +2808,25 @@ int dbg_debugfs_init_fs(struct ubifs_info *c)
        sprintf(d->dfs_dir_name, "ubi%d_%d", c->vi.ubi_num, c->vi.vol_id);
        fname = d->dfs_dir_name;
        dent = debugfs_create_dir(fname, dfs_rootdir);
-       if (IS_ERR(dent))
+       if (IS_ERR_OR_NULL(dent))
                goto out;
        d->dfs_dir = dent;
 
        fname = "dump_lprops";
        dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops);
-       if (IS_ERR(dent))
+       if (IS_ERR_OR_NULL(dent))
                goto out_remove;
        d->dfs_dump_lprops = dent;
 
        fname = "dump_budg";
        dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops);
-       if (IS_ERR(dent))
+       if (IS_ERR_OR_NULL(dent))
                goto out_remove;
        d->dfs_dump_budg = dent;
 
        fname = "dump_tnc";
        dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops);
-       if (IS_ERR(dent))
+       if (IS_ERR_OR_NULL(dent))
                goto out_remove;
        d->dfs_dump_tnc = dent;
 
@@ -2835,7 +2835,7 @@ int dbg_debugfs_init_fs(struct ubifs_info *c)
 out_remove:
        debugfs_remove_recursive(d->dfs_dir);
 out:
-       err = PTR_ERR(dent);
+       err = dent ? PTR_ERR(dent) : -ENODEV;
        ubifs_err("cannot create \"%s\" debugfs directory, error %d\n",
                  fname, err);
        return err;