Loading fs/configfs/symlink.c +13 −20 Original line number Diff line number Diff line Loading @@ -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); } } 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; } Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading Loading
fs/configfs/symlink.c +13 −20 Original line number Diff line number Diff line Loading @@ -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); } } 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; } Loading @@ -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; Loading Loading @@ -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; Loading @@ -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); Loading