linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] vfs: only read fops once in fops_get/put
@ 2024-08-08 15:54 Mateusz Guzik
  2024-08-08 20:55 ` Josef Bacik
  2024-08-09  8:30 ` Christian Brauner
  0 siblings, 2 replies; 3+ messages in thread
From: Mateusz Guzik @ 2024-08-08 15:54 UTC (permalink / raw)
  To: brauner; +Cc: viro, jack, linux-kernel, linux-fsdevel, Mateusz Guzik

The compiler emits 2 access in fops_get(), put is patched to maintain some
consistency.

This makes do_dentry_open() go down from 1177 to 1154 bytes.

This popped up due to false-sharing where loads from inode->i_fop end up
bouncing a cacheline on parallel open. While this is going to be fixed,
the spurious load does not need to be there.

No functional changes.

Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
---
 include/linux/fs.h | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/include/linux/fs.h b/include/linux/fs.h
index ef5ada9d5e33..87d191798454 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2565,10 +2565,17 @@ struct super_block *sget(struct file_system_type *type,
 struct super_block *sget_dev(struct fs_context *fc, dev_t dev);
 
 /* Alas, no aliases. Too much hassle with bringing module.h everywhere */
-#define fops_get(fops) \
-	(((fops) && try_module_get((fops)->owner) ? (fops) : NULL))
-#define fops_put(fops) \
-	do { if (fops) module_put((fops)->owner); } while(0)
+#define fops_get(fops) ({						\
+	const struct file_operations *_fops = (fops);			\
+	(((_fops) && try_module_get((_fops)->owner) ? (_fops) : NULL));	\
+})
+
+#define fops_put(fops) ({						\
+	const struct file_operations *_fops = (fops);			\
+	if (_fops)							\
+		module_put((_fops)->owner);				\
+})
+
 /*
  * This one is to be used *ONLY* from ->open() instances.
  * fops must be non-NULL, pinned down *and* module dependencies
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] vfs: only read fops once in fops_get/put
  2024-08-08 15:54 [PATCH] vfs: only read fops once in fops_get/put Mateusz Guzik
@ 2024-08-08 20:55 ` Josef Bacik
  2024-08-09  8:30 ` Christian Brauner
  1 sibling, 0 replies; 3+ messages in thread
From: Josef Bacik @ 2024-08-08 20:55 UTC (permalink / raw)
  To: Mateusz Guzik; +Cc: brauner, viro, jack, linux-kernel, linux-fsdevel

On Thu, Aug 08, 2024 at 05:54:28PM +0200, Mateusz Guzik wrote:
> The compiler emits 2 access in fops_get(), put is patched to maintain some
> consistency.
> 
> This makes do_dentry_open() go down from 1177 to 1154 bytes.
> 
> This popped up due to false-sharing where loads from inode->i_fop end up
> bouncing a cacheline on parallel open. While this is going to be fixed,
> the spurious load does not need to be there.
> 
> No functional changes.
> 
> Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>

Reviewed-by: Josef Bacik <josef@toxicpanda.com>

Thanks,

Josef

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] vfs: only read fops once in fops_get/put
  2024-08-08 15:54 [PATCH] vfs: only read fops once in fops_get/put Mateusz Guzik
  2024-08-08 20:55 ` Josef Bacik
@ 2024-08-09  8:30 ` Christian Brauner
  1 sibling, 0 replies; 3+ messages in thread
From: Christian Brauner @ 2024-08-09  8:30 UTC (permalink / raw)
  To: Mateusz Guzik; +Cc: Christian Brauner, viro, jack, linux-kernel, linux-fsdevel

On Thu, 08 Aug 2024 17:54:28 +0200, Mateusz Guzik wrote:
> The compiler emits 2 access in fops_get(), put is patched to maintain some
> consistency.
> 
> This makes do_dentry_open() go down from 1177 to 1154 bytes.
> 
> This popped up due to false-sharing where loads from inode->i_fop end up
> bouncing a cacheline on parallel open. While this is going to be fixed,
> the spurious load does not need to be there.
> 
> [...]

Applied to the vfs.misc branch of the vfs/vfs.git tree.
Patches in the vfs.misc branch should appear in linux-next soon.

Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.

It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.

Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.misc

[1/1] vfs: only read fops once in fops_get/put
      https://git.kernel.org/vfs/vfs/c/2a2dc5eb79c4

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-08-09  8:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-08 15:54 [PATCH] vfs: only read fops once in fops_get/put Mateusz Guzik
2024-08-08 20:55 ` Josef Bacik
2024-08-09  8:30 ` Christian Brauner

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).