diff --git a/fs/fs_parser.c b/fs/fs_parser.c index d1930adce68d..c19b5169ce0e 100644 --- a/fs/fs_parser.c +++ b/fs/fs_parser.c @@ -256,33 +256,32 @@ int fs_lookup_param(struct fs_context *fc, struct path *_path) { struct filename *f; + const char *s; unsigned int flags = 0; - bool put_f; int ret; switch (param->type) { case fs_value_is_string: - f = getname_kernel(param->string); + f = getname_kernel(s = param->string); if (IS_ERR(f)) return PTR_ERR(f); - put_f = true; break; case fs_value_is_filename_empty: flags = LOOKUP_EMPTY; /* Fall through */ case fs_value_is_filename: f = param->name; - put_f = false; + s = f->name; + f->refcnt++; /* filename_lookup() drops our ref. */ break; default: return invalf(fc, "%s: not usable as path", param->key); } - f->refcnt++; /* filename_lookup() drops our ref. */ ret = filename_lookup(param->dirfd, f, flags, _path, NULL); if (ret < 0) { - errorf(fc, "%s: Lookup failure for '%s'", param->key, f->name); - goto out; + errorf(fc, "%s: Lookup failure for '%s'", param->key, s); + return ret; } if (want_bdev && @@ -290,15 +289,10 @@ int fs_lookup_param(struct fs_context *fc, path_put(_path); _path->dentry = NULL; _path->mnt = NULL; - errorf(fc, "%s: Non-blockdev passed as '%s'", - param->key, f->name); - ret = -ENOTBLK; + errorf(fc, "%s: Non-blockdev passed as '%s'", param->key, s); + return -ENOTBLK; } - -out: - if (put_f) - putname(f); - return ret; + return 0; } EXPORT_SYMBOL(fs_lookup_param);