shmem: Refactor shmem_symlink()
authorChuck Lever <chuck.lever@oracle.com>
Fri, 30 Jun 2023 17:48:56 +0000 (13:48 -0400)
committerChristian Brauner <brauner@kernel.org>
Wed, 9 Aug 2023 07:15:40 +0000 (09:15 +0200)
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>
mm/shmem.c

index 72326ea..f5006ea 100644 (file)
@@ -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)