linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 4/9] cachefiles: use tmpfile_open() helper
Date: Tue, 20 Sep 2022 21:36:27 +0200	[thread overview]
Message-ID: <20220920193632.2215598-5-mszeredi@redhat.com> (raw)
In-Reply-To: <20220920193632.2215598-1-mszeredi@redhat.com>

Use the tmpfile_open() helper instead of doing tmpfile creation and opening
separately.

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
---
 fs/cachefiles/namei.c | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d3a5884fe5c9..44f575328af4 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -451,18 +451,19 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
 	const struct cred *saved_cred;
 	struct dentry *fan = volume->fanout[(u8)object->cookie->key_hash];
 	struct file *file;
-	struct path path;
+	struct path path = { .mnt = cache->mnt, .dentry = fan };
 	uint64_t ni_size;
 	long ret;
 
 
 	cachefiles_begin_secure(cache, &saved_cred);
 
-	path.mnt = cache->mnt;
 	ret = cachefiles_inject_write_error();
 	if (ret == 0) {
-		path.dentry = vfs_tmpfile(&init_user_ns, fan, S_IFREG, O_RDWR);
-		ret = PTR_ERR_OR_ZERO(path.dentry);
+		file = tmpfile_open(&init_user_ns, &path, S_IFREG,
+				    O_RDWR | O_LARGEFILE | O_DIRECT,
+				    cache->cache_cred);
+		ret = PTR_ERR_OR_ZERO(file);
 	}
 	if (ret) {
 		trace_cachefiles_vfs_error(object, d_inode(fan), ret,
@@ -471,12 +472,14 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
 			cachefiles_io_error_obj(object, "Failed to create tmpfile");
 		goto err;
 	}
+	/* From now path refers to the tmpfile */
+	path.dentry = file->f_path.dentry;
 
 	trace_cachefiles_tmpfile(object, d_backing_inode(path.dentry));
 
 	ret = -EBUSY;
 	if (!cachefiles_mark_inode_in_use(object, path.dentry))
-		goto err_dput;
+		goto err_fput;
 
 	ret = cachefiles_ondemand_init_object(object);
 	if (ret < 0)
@@ -499,14 +502,6 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
 		}
 	}
 
-	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),
-					   ret, cachefiles_trace_open_error);
-		goto err_unuse;
-	}
 	ret = -EINVAL;
 	if (unlikely(!file->f_op->read_iter) ||
 	    unlikely(!file->f_op->write_iter)) {
@@ -514,15 +509,14 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
 		pr_notice("Cache does not support read_iter and write_iter\n");
 		goto err_unuse;
 	}
-	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_fput:
+	fput(file);
 err:
 	file = ERR_PTR(ret);
 	goto out;
-- 
2.37.3


  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 ` [PATCH v3 1/9] cachefiles: tmpfile error handling cleanup Miklos Szeredi
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 ` Miklos Szeredi [this message]
2022-09-21  8:26   ` [PATCH v3 4/9] cachefiles: use " 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-5-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).