mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +00:00
shmem: Refactor shmem_symlink()
De-duplicate the error handling paths. No change in behavior is expected. Suggested-by: Jeff Layton <jlayton@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Message-Id: <168814733654.530310.9958360833543413152.stgit@manet.1015granger.net> Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
6faddda69f
commit
23a31d8764
19
mm/shmem.c
19
mm/shmem.c
@ -3422,26 +3422,22 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir,
|
||||
|
||||
error = security_inode_init_security(inode, dir, &dentry->d_name,
|
||||
shmem_initxattrs, NULL);
|
||||
if (error && error != -EOPNOTSUPP) {
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
if (error && error != -EOPNOTSUPP)
|
||||
goto out_iput;
|
||||
|
||||
inode->i_size = len-1;
|
||||
if (len <= SHORT_SYMLINK_LEN) {
|
||||
inode->i_link = kmemdup(symname, len, GFP_KERNEL);
|
||||
if (!inode->i_link) {
|
||||
iput(inode);
|
||||
return -ENOMEM;
|
||||
error = -ENOMEM;
|
||||
goto out_iput;
|
||||
}
|
||||
inode->i_op = &shmem_short_symlink_operations;
|
||||
} else {
|
||||
inode_nohighmem(inode);
|
||||
error = shmem_get_folio(inode, 0, &folio, SGP_WRITE);
|
||||
if (error) {
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
if (error)
|
||||
goto out_iput;
|
||||
inode->i_mapping->a_ops = &shmem_aops;
|
||||
inode->i_op = &shmem_symlink_inode_operations;
|
||||
memcpy(folio_address(folio), symname, len);
|
||||
@ -3456,6 +3452,9 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir,
|
||||
d_instantiate(dentry, inode);
|
||||
dget(dentry);
|
||||
return 0;
|
||||
out_iput:
|
||||
iput(inode);
|
||||
return error;
|
||||
}
|
||||
|
||||
static void shmem_put_link(void *arg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user