From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sasha Levin <sashal@kernel.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Andrew Morton <akpm@linux-foundation.org>,
Al Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>
Subject: [v6.7][PATCH 07/23] eventfs: Shortcut eventfs_iterate() by skipping entries already read
Date: Sat, 03 Feb 2024 20:16:22 -0500 [thread overview]
Message-ID: <20240204011828.022360802@goodmis.org> (raw)
In-Reply-To: 20240204011615.703023949@goodmis.org
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>
As the ei->entries array is fixed for the duration of the eventfs_inode,
it can be used to skip over already read entries in eventfs_iterate().
That is, if ctx->pos is greater than zero, there's no reason in doing the
loop across the ei->entries array for the entries less than ctx->pos.
Instead, start the lookup of the entries at the current ctx->pos.
Link: https://lore.kernel.org/all/CAHk-=wiKwDUDv3+jCsv-uacDcHDVTYsXtBR9=6sGM5mqX+DhOg@mail.gmail.com/
Link: https://lore.kernel.org/linux-trace-kernel/20240104220048.494956957@goodmis.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
fs/tracefs/event_inode.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/fs/tracefs/event_inode.c b/fs/tracefs/event_inode.c
index a1934e0eea3b..fdff53d5a1f8 100644
--- a/fs/tracefs/event_inode.c
+++ b/fs/tracefs/event_inode.c
@@ -746,21 +746,15 @@ static int eventfs_iterate(struct file *file, struct dir_context *ctx)
if (!ei || !ei_dentry)
goto out;
- ret = 0;
-
/*
* Need to create the dentries and inodes to have a consistent
* inode number.
*/
- for (i = 0; i < ei->nr_entries; i++) {
- void *cdata = ei->data;
-
- if (c > 0) {
- c--;
- continue;
- }
+ ret = 0;
- ctx->pos++;
+ /* Start at 'c' to jump over already read entries */
+ for (i = c; i < ei->nr_entries; i++, ctx->pos++) {
+ void *cdata = ei->data;
entry = &ei->entries[i];
name = entry->name;
@@ -769,7 +763,7 @@ static int eventfs_iterate(struct file *file, struct dir_context *ctx)
/* If ei->is_freed then just bail here, nothing more to do */
if (ei->is_freed) {
mutex_unlock(&eventfs_mutex);
- goto out_dec;
+ goto out;
}
r = entry->callback(name, &mode, &cdata, &fops);
mutex_unlock(&eventfs_mutex);
@@ -778,14 +772,17 @@ static int eventfs_iterate(struct file *file, struct dir_context *ctx)
dentry = create_file_dentry(ei, i, ei_dentry, name, mode, cdata, fops);
if (!dentry)
- goto out_dec;
+ goto out;
ino = dentry->d_inode->i_ino;
dput(dentry);
if (!dir_emit(ctx, name, strlen(name), ino, DT_REG))
- goto out_dec;
+ goto out;
}
+ /* Subtract the skipped entries above */
+ c -= min((unsigned int)c, (unsigned int)ei->nr_entries);
+
list_for_each_entry_srcu(ei_child, &ei->children, list,
srcu_read_lock_held(&eventfs_srcu)) {
--
2.43.0
next prev parent reply other threads:[~2024-02-04 1:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-04 1:16 [v6.7][PATCH 00/23] eventfs: Linus's updates for 6.7 Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 01/23] eventfs: Remove "lookup" parameter from create_dir/file_dentry() Steven Rostedt
2024-02-04 1:19 ` kernel test robot
2024-02-04 1:16 ` [v6.7][PATCH 02/23] eventfs: Stop using dcache_readdir() for getdents() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 03/23] tracefs/eventfs: Use root and instance inodes as default ownership Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 04/23] eventfs: Have eventfs_iterate() stop immediately if ei->is_freed is set Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 05/23] eventfs: Do ctx->pos update for all iterations in eventfs_iterate() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 06/23] eventfs: Read ei->entries before ei->children " Steven Rostedt
2024-02-04 1:16 ` Steven Rostedt [this message]
2024-02-04 1:16 ` [v6.7][PATCH 08/23] eventfs: Have the inodes all for files and directories all be the same Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 09/23] eventfs: Do not create dentries nor inodes in iterate_shared Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 10/23] eventfs: Use kcalloc() instead of kzalloc() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 11/23] eventfs: Save directory inodes in the eventfs_inode structure Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 12/23] tracefs: remove stale update_gid code Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 13/23] tracefs: Zero out the tracefs_inode when allocating it Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 14/23] eventfs: Initialize the tracefs inode properly Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 15/23] tracefs: Avoid using the ei->dentry pointer unnecessarily Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 16/23] tracefs: dentry lookup crapectomy Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 17/23] eventfs: Remove unused d_parent pointer field Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 18/23] eventfs: Clean up dentry ops and add revalidate function Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 19/23] eventfs: Get rid of dentry pointers without refcounts Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 20/23] eventfs: Warn if an eventfs_inode is freed without is_freed being set Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 21/23] eventfs: Restructure eventfs_inode structure to be more condensed Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 22/23] eventfs: Remove fsnotify*() functions from lookup() Steven Rostedt
2024-02-04 1:16 ` [v6.7][PATCH 23/23] eventfs: Keep all directory links at 1 Steven Rostedt
2024-02-04 1:25 ` [v6.7][PATCH 00/23] eventfs: Linus's updates for 6.7 Steven Rostedt
2024-02-05 13:14 ` Greg Kroah-Hartman
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=20240204011828.022360802@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=brauner@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.