On Sat 06-09-25 10:11:37, Al Viro wrote: > ... and get rid of path argument - it turns into a local variable in get_target() > > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/configfs/symlink.c | 33 +++++++++++++-------------------- > 1 file changed, 13 insertions(+), 20 deletions(-) > > diff --git a/fs/configfs/symlink.c b/fs/configfs/symlink.c > index 69133ec1fac2..f3f79c67add5 100644 > --- a/fs/configfs/symlink.c > +++ b/fs/configfs/symlink.c > @@ -114,26 +114,21 @@ static int create_link(struct config_item *parent_item, > } > > > -static int get_target(const char *symname, struct path *path, > - struct config_item **target, struct super_block *sb) > +static int get_target(const char *symname, struct config_item **target, > + struct super_block *sb) > { > + struct path path __free(path_put) = {}; > int ret; > > - ret = kern_path(symname, LOOKUP_FOLLOW|LOOKUP_DIRECTORY, path); > - if (!ret) { > - if (path->dentry->d_sb == sb) { > - *target = configfs_get_config_item(path->dentry); > - if (!*target) { > - ret = -ENOENT; > - path_put(path); > - } > - } else { > - ret = -EPERM; > - path_put(path); > - } > - } > - > - return ret; > + ret = kern_path(symname, LOOKUP_FOLLOW|LOOKUP_DIRECTORY, &path); > + if (ret) > + return ret; > + if (path.dentry->d_sb != sb) > + return -EPERM; > + *target = configfs_get_config_item(path.dentry); > + if (!*target) > + return -ENOENT; > + return 0; > } > > > @@ -141,7 +136,6 @@ int configfs_symlink(struct mnt_idmap *idmap, struct inode *dir, > struct dentry *dentry, const char *symname) > { > int ret; > - struct path path; > struct configfs_dirent *sd; > struct config_item *parent_item; > struct config_item *target_item = NULL; > @@ -188,7 +182,7 @@ int configfs_symlink(struct mnt_idmap *idmap, struct inode *dir, > * AV, a thoroughly annoyed bastard. > */ > inode_unlock(dir); > - ret = get_target(symname, &path, &target_item, dentry->d_sb); > + ret = get_target(symname, &target_item, dentry->d_sb); > inode_lock(dir); > if (ret) > goto out_put; > @@ -210,7 +204,6 @@ int configfs_symlink(struct mnt_idmap *idmap, struct inode *dir, > } > > config_item_put(target_item); > - path_put(&path); > > out_put: > config_item_put(parent_item); > -- > 2.47.2 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR