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>,
	Christian Brauner <brauner@kernel.org>,
	Amir Goldstein <amir73il@gmail.com>,
	David Howells <dhowells@redhat.com>,
	Yu-li Lin <yulilin@google.com>,
	Chirantan Ekbote <chirantan@chromium.org>
Subject: [PATCH v4 04/10] cachefiles: only pass inode to *mark_inode_inuse() helpers
Date: Thu, 22 Sep 2022 10:44:36 +0200	[thread overview]
Message-ID: <20220922084442.2401223-5-mszeredi@redhat.com> (raw)
In-Reply-To: <20220922084442.2401223-1-mszeredi@redhat.com>

The only reason to pass dentry was because of a pr_notice() text.  Move
that to the two callers where it makes sense and add a WARN_ON() to the
third.

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

diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
index d3a5884fe5c9..4d04f5fb49f3 100644
--- a/fs/cachefiles/namei.c
+++ b/fs/cachefiles/namei.c
@@ -15,9 +15,8 @@
  * file or directory.  The caller must hold the inode lock.
  */
 static bool __cachefiles_mark_inode_in_use(struct cachefiles_object *object,
-					   struct dentry *dentry)
+					   struct inode *inode)
 {
-	struct inode *inode = d_backing_inode(dentry);
 	bool can_use = false;
 
 	if (!(inode->i_flags & S_KERNEL_FILE)) {
@@ -26,21 +25,18 @@ static bool __cachefiles_mark_inode_in_use(struct cachefiles_object *object,
 		can_use = true;
 	} else {
 		trace_cachefiles_mark_failed(object, inode);
-		pr_notice("cachefiles: Inode already in use: %pd (B=%lx)\n",
-			  dentry, inode->i_ino);
 	}
 
 	return can_use;
 }
 
 static bool cachefiles_mark_inode_in_use(struct cachefiles_object *object,
-					 struct dentry *dentry)
+					 struct inode *inode)
 {
-	struct inode *inode = d_backing_inode(dentry);
 	bool can_use;
 
 	inode_lock(inode);
-	can_use = __cachefiles_mark_inode_in_use(object, dentry);
+	can_use = __cachefiles_mark_inode_in_use(object, inode);
 	inode_unlock(inode);
 	return can_use;
 }
@@ -49,21 +45,17 @@ static bool cachefiles_mark_inode_in_use(struct cachefiles_object *object,
  * Unmark a backing inode.  The caller must hold the inode lock.
  */
 static void __cachefiles_unmark_inode_in_use(struct cachefiles_object *object,
-					     struct dentry *dentry)
+					     struct inode *inode)
 {
-	struct inode *inode = d_backing_inode(dentry);
-
 	inode->i_flags &= ~S_KERNEL_FILE;
 	trace_cachefiles_mark_inactive(object, inode);
 }
 
 static void cachefiles_do_unmark_inode_in_use(struct cachefiles_object *object,
-					      struct dentry *dentry)
+					      struct inode *inode)
 {
-	struct inode *inode = d_backing_inode(dentry);
-
 	inode_lock(inode);
-	__cachefiles_unmark_inode_in_use(object, dentry);
+	__cachefiles_unmark_inode_in_use(object, inode);
 	inode_unlock(inode);
 }
 
@@ -78,7 +70,7 @@ void cachefiles_unmark_inode_in_use(struct cachefiles_object *object,
 	struct inode *inode = file_inode(file);
 
 	if (inode) {
-		cachefiles_do_unmark_inode_in_use(object, file->f_path.dentry);
+		cachefiles_do_unmark_inode_in_use(object, file_inode(file));
 
 		if (!test_bit(CACHEFILES_OBJECT_USING_TMPFILE, &object->flags)) {
 			atomic_long_add(inode->i_blocks, &cache->b_released);
@@ -164,8 +156,11 @@ struct dentry *cachefiles_get_directory(struct cachefiles_cache *cache,
 	inode_lock(d_inode(subdir));
 	inode_unlock(d_inode(dir));
 
-	if (!__cachefiles_mark_inode_in_use(NULL, subdir))
+	if (!__cachefiles_mark_inode_in_use(NULL, d_inode(subdir))) {
+		pr_notice("cachefiles: Inode already in use: %pd (B=%lx)\n",
+			  subdir, d_inode(subdir)->i_ino);
 		goto mark_error;
+	}
 
 	inode_unlock(d_inode(subdir));
 
@@ -225,7 +220,7 @@ void cachefiles_put_directory(struct dentry *dir)
 {
 	if (dir) {
 		inode_lock(dir->d_inode);
-		__cachefiles_unmark_inode_in_use(NULL, dir);
+		__cachefiles_unmark_inode_in_use(NULL, d_inode(dir));
 		inode_unlock(dir->d_inode);
 		dput(dir);
 	}
@@ -410,7 +405,7 @@ int cachefiles_bury_object(struct cachefiles_cache *cache,
 					    "Rename failed with error %d", ret);
 	}
 
-	__cachefiles_unmark_inode_in_use(object, rep);
+	__cachefiles_unmark_inode_in_use(object, d_inode(rep));
 	unlock_rename(cache->graveyard, dir);
 	dput(grave);
 	_leave(" = 0");
@@ -474,9 +469,9 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
 
 	trace_cachefiles_tmpfile(object, d_backing_inode(path.dentry));
 
-	ret = -EBUSY;
-	if (!cachefiles_mark_inode_in_use(object, path.dentry))
-		goto err_dput;
+	/* This is a newly created file with no other possible user */
+	if (!cachefiles_mark_inode_in_use(object, d_inode(path.dentry)))
+		WARN_ON(1);
 
 	ret = cachefiles_ondemand_init_object(object);
 	if (ret < 0)
@@ -520,8 +515,7 @@ struct file *cachefiles_create_tmpfile(struct cachefiles_object *object)
 	return file;
 
 err_unuse:
-	cachefiles_do_unmark_inode_in_use(object, path.dentry);
-err_dput:
+	cachefiles_do_unmark_inode_in_use(object, d_inode(path.dentry));
 	dput(path.dentry);
 err:
 	file = ERR_PTR(ret);
@@ -566,8 +560,11 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
 
 	_enter("%pd", dentry);
 
-	if (!cachefiles_mark_inode_in_use(object, dentry))
+	if (!cachefiles_mark_inode_in_use(object, d_inode(dentry))) {
+		pr_notice("cachefiles: Inode already in use: %pd (B=%lx)\n",
+			  dentry, d_inode(dentry)->i_ino);
 		return false;
+	}
 
 	/* We need to open a file interface onto a data file now as we can't do
 	 * it on demand because writeback called from do_exit() sees
@@ -621,7 +618,7 @@ static bool cachefiles_open_file(struct cachefiles_object *object,
 error_fput:
 	fput(file);
 error:
-	cachefiles_do_unmark_inode_in_use(object, dentry);
+	cachefiles_do_unmark_inode_in_use(object, d_inode(dentry));
 	dput(dentry);
 	return false;
 }
-- 
2.37.3


  parent reply	other threads:[~2022-09-22  8:45 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-22  8:44 [PATCH v4 00/10] fuse tmpfile Miklos Szeredi
2022-09-22  8:44 ` [PATCH v4 01/10] vfs: add vfs_tmpfile_open() helper Miklos Szeredi
2022-09-22 15:23   ` Christian Brauner
2022-09-22  8:44 ` [PATCH v4 02/10] hugetlbfs: cleanup mknod and tmpfile Miklos Szeredi
2022-09-22  8:44 ` [PATCH v4 03/10] cachefiles: tmpfile error handling cleanup Miklos Szeredi
2022-09-22  8:44 ` Miklos Szeredi [this message]
2022-09-22 15:24   ` [PATCH v4 04/10] cachefiles: only pass inode to *mark_inode_inuse() helpers Christian Brauner
2022-09-22 16:22   ` Al Viro
2022-09-23 15:42     ` Miklos Szeredi
2022-09-24  4:56       ` Al Viro
2022-09-24  5:02         ` Miklos Szeredi
2022-09-24 14:37           ` Al Viro
2022-09-22  8:44 ` [PATCH v4 05/10] cachefiles: use vfs_tmpfile_open() helper Miklos Szeredi
2022-09-22 15:26   ` Christian Brauner
2022-09-22  8:44 ` [PATCH v4 06/10] ovl: " Miklos Szeredi
2022-09-22  8:44 ` [PATCH v4 07/10] vfs: make vfs_tmpfile() static Miklos Szeredi
2022-09-22  8:44 ` [PATCH v4 08/10] vfs: move open right after ->tmpfile() Miklos Szeredi
2022-09-22  8:44 ` [PATCH v4 09/10] vfs: open inside ->tmpfile() Miklos Szeredi
2022-09-22 15:27   ` Christian Brauner
2022-09-22  8:44 ` [PATCH v4 10/10] fuse: implement ->tmpfile() Miklos Szeredi
2022-09-22 15:29   ` Christian Brauner
2022-09-29  8:37 ` [PATCH v4 00/10] fuse tmpfile David Howells
2022-09-29  8:44 ` [PATCH v4 05/10] cachefiles: use vfs_tmpfile_open() helper David Howells
2022-09-30 13:53   ` 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=20220922084442.2401223-5-mszeredi@redhat.com \
    --to=mszeredi@redhat.com \
    --cc=amir73il@gmail.com \
    --cc=brauner@kernel.org \
    --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).