eventfs: Read ei->entries before ei->children in eventfs_iterate()

In order to apply a shortcut to skip over the current ctx->pos
immediately, by using the ei->entries array, the reading of that array
should be first. Moving the array reading before the linked list reading
will make the shortcut change diff nicer to read.

Link: https://lore.kernel.org/all/CAHk-=wiKwDUDv3+jCsv-uacDcHDVTYsXtBR9=6sGM5mqX+DhOg@mail.gmail.com/
Link: https://lore.kernel.org/linux-trace-kernel/[email protected]

Cc: Masami Hiramatsu <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Mathieu Desnoyers <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Christian Brauner <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Steven Rostedt (Google) <[email protected]>
This commit is contained in:
Steven Rostedt (Google) committed 2024-01-04 17:11:58 -05:00
1 parent 1e4624eb5a
commit 704f960dbe
1 file changed
+25 -25
+25 -25
View File
@@ -752,31 +752,6 @@ static int eventfs_iterate(struct file *file, struct dir_context *ctx)
* Need to create the dentries and inodes to have a consistent
* inode number.
*/
list_for_each_entry_srcu(ei_child, &ei->children, list,
srcu_read_lock_held(&eventfs_srcu)) {
if (c > 0) {
c--;
continue;
}
ctx->pos++;
if (ei_child->is_freed)
continue;
name = ei_child->name;
dentry = create_dir_dentry(ei, ei_child, ei_dentry);
if (!dentry)
goto out_dec;
ino = dentry->d_inode->i_ino;
dput(dentry);
if (!dir_emit(ctx, name, strlen(name), ino, DT_DIR))
goto out_dec;
}
for (i = 0; i < ei->nr_entries; i++) {
void *cdata = ei->data;
@@ -810,6 +785,31 @@ static int eventfs_iterate(struct file *file, struct dir_context *ctx)
if (!dir_emit(ctx, name, strlen(name), ino, DT_REG))
goto out_dec;
}
list_for_each_entry_srcu(ei_child, &ei->children, list,
srcu_read_lock_held(&eventfs_srcu)) {
if (c > 0) {
c--;
continue;
}
ctx->pos++;
if (ei_child->is_freed)
continue;
name = ei_child->name;
dentry = create_dir_dentry(ei, ei_child, ei_dentry);
if (!dentry)
goto out_dec;
ino = dentry->d_inode->i_ino;
dput(dentry);
if (!dir_emit(ctx, name, strlen(name), ino, DT_DIR))
goto out_dec;
}
ret = 1;
out:
srcu_read_unlock(&eventfs_srcu, idx);