From: Miklos Szeredi <mszeredi@redhat.com>
To: linux-fsdevel@vger.kernel.org
Cc: Al Viro <viro@ZenIV.linux.org.uk>,
Amir Goldstein <amir73il@gmail.com>,
David Howells <dhowells@redhat.com>,
Yu-li Lin <yulilin@google.com>,
Chirantan Ekbote <chirantan@chromium.org>
Subject: [PATCH v3 1/9] cachefiles: tmpfile error handling cleanup
Date: Tue, 20 Sep 2022 21:36:24 +0200 [thread overview]
Message-ID: <20220920193632.2215598-2-mszeredi@redhat.com> (raw)
In-Reply-To: <20220920193632.2215598-1-mszeredi@redhat.com>
Separate the error labels from the success path and use 'ret' to store the
error value before jumping to the error label.
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
---
fs/cachefiles/namei.c | 55 ++++++++++++++++++++-----------------------
1 file changed, 26 insertions(+), 29 deletions(-)
diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index facf2ebe464b..d3a5884fe5c9 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -460,31 +460,27 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
path.mnt = cache->mnt;
ret = cachefiles_inject_write_error();
- if (ret == 0)
+ if (ret == 0) {
path.dentry = vfs_tmpfile(&init_user_ns, fan, S_IFREG, O_RDWR);
- else
- path.dentry = ERR_PTR(ret);
- if (IS_ERR(path.dentry)) {
- trace_cachefiles_vfs_error(object, d_inode(fan), PTR_ERR(path.dentry),
+ ret = PTR_ERR_OR_ZERO(path.dentry);
+ }
+ if (ret) {
+ trace_cachefiles_vfs_error(object, d_inode(fan), ret,
cachefiles_trace_tmpfile_error);
- if (PTR_ERR(path.dentry) == -EIO)
+ if (ret == -EIO)
cachefiles_io_error_obj(object, "Failed to create tmpfile");
- file = ERR_CAST(path.dentry);
- goto out;
+ goto err;
}
trace_cachefiles_tmpfile(object, d_backing_inode(path.dentry));
- if (!cachefiles_mark_inode_in_use(object, path.dentry)) {
- file = ERR_PTR(-EBUSY);
- goto out_dput;
- }
+ ret = -EBUSY;
+ if (!cachefiles_mark_inode_in_use(object, path.dentry))
+ goto err_dput;
ret = cachefiles_ondemand_init_object(object);
- if (ret < 0) {
- file = ERR_PTR(ret);
- goto out_unuse;
- }
+ if (ret < 0)
+ goto err_unuse;
ni_size = object->cookie->object_size;
ni_size = round_up(ni_size, CACHEFILES_DIO_BLOCK_SIZE);
@@ -499,36 +495,37 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
trace_cachefiles_vfs_error(
object, d_backing_inode(path.dentry), ret,
cachefiles_trace_trunc_error);
- file = ERR_PTR(ret);
- goto out_unuse;
+ goto err_unuse;
}
}
file = open_with_fake_path(&path, O_RDWR | O_LARGEFILE | O_DIRECT,
d_backing_inode(path.dentry), cache->cache_cred);
+ ret = PTR_ERR(file);
if (IS_ERR(file)) {
trace_cachefiles_vfs_error(object, d_backing_inode(path.dentry),
- PTR_ERR(file),
- cachefiles_trace_open_error);
- goto out_unuse;
+ ret, cachefiles_trace_open_error);
+ goto err_unuse;
}
+ ret = -EINVAL;
if (unlikely(!file->f_op->read_iter) ||
unlikely(!file->f_op->write_iter)) {
fput(file);
pr_notice("Cache does not support read_iter and write_iter\n");
- file = ERR_PTR(-EINVAL);
- goto out_unuse;
+ goto err_unuse;
}
-
- goto out_dput;
-
-out_unuse:
- cachefiles_do_unmark_inode_in_use(object, path.dentry);
-out_dput:
dput(path.dentry);
out:
cachefiles_end_secure(cache, saved_cred);
return file;
+
+err_unuse:
+ cachefiles_do_unmark_inode_in_use(object, path.dentry);
+err_dput:
+ dput(path.dentry);
+err:
+ file = ERR_PTR(ret);
+ goto out;
}
/*
--
2.37.3
next prev parent reply other threads:[~2022-09-20 19:36 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-20 19:36 [PATCH v3 0/9] fuse tmpfile Miklos Szeredi
2022-09-20 19:36 ` Miklos Szeredi [this message]
2022-09-20 19:36 ` [PATCH v3 2/9] hugetlbfs: cleanup mknod and tmpfile Miklos Szeredi
2022-09-21 7:59 ` Christian Brauner
2022-09-20 19:36 ` [PATCH v3 3/9] vfs: add tmpfile_open() helper Miklos Szeredi
2022-09-21 8:09 ` Christian Brauner
2022-09-21 14:33 ` Miklos Szeredi
2022-09-20 19:36 ` [PATCH v3 4/9] cachefiles: use " Miklos Szeredi
2022-09-21 8:26 ` Christian Brauner
2022-09-21 14:44 ` Miklos Szeredi
2022-09-21 19:46 ` Al Viro
2022-09-22 8:04 ` Christian Brauner
2022-09-20 19:36 ` [PATCH v3 5/9] ovl: " Miklos Szeredi
2022-09-21 8:35 ` Christian Brauner
2022-09-20 19:36 ` [PATCH v3 6/9] vfs: make vfs_tmpfile() static Miklos Szeredi
2022-09-21 8:36 ` Christian Brauner
2022-09-20 19:36 ` [PATCH v3 7/9] vfs: move open right after ->tmpfile() Miklos Szeredi
2022-09-20 20:57 ` Al Viro
2022-09-21 3:06 ` Miklos Szeredi
2022-09-21 8:54 ` Christian Brauner
2022-09-21 14:53 ` Miklos Szeredi
2022-09-21 19:55 ` Al Viro
2022-09-21 9:03 ` Christian Brauner
2022-09-21 14:56 ` Miklos Szeredi
2022-09-21 15:09 ` Christian Brauner
2022-09-21 15:24 ` Miklos Szeredi
2022-09-20 19:36 ` [PATCH v3 8/9] vfs: open inside ->tmpfile() Miklos Szeredi
2022-09-21 9:08 ` Christian Brauner
2022-09-21 14:58 ` Miklos Szeredi
2022-09-21 15:07 ` Christian Brauner
2022-09-21 15:27 ` Miklos Szeredi
2022-09-21 15:36 ` Christian Brauner
2022-09-21 19:52 ` Al Viro
2022-09-20 19:36 ` [PATCH v3 9/9] fuse: implement ->tmpfile() Miklos Szeredi
2022-09-21 9:15 ` Christian Brauner
2022-09-21 15:00 ` Miklos Szeredi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220920193632.2215598-2-mszeredi@redhat.com \
--to=mszeredi@redhat.com \
--cc=amir73il@gmail.com \
--cc=chirantan@chromium.org \
--cc=dhowells@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=viro@ZenIV.linux.org.uk \
--cc=yulilin@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).