]> www.infradead.org Git - users/hch/misc.git/commitdiff
netfs: Fix rolling_buffer_load_from_ra() to not clear mark bits
authorDavid Howells <dhowells@redhat.com>
Fri, 14 Mar 2025 16:41:58 +0000 (16:41 +0000)
committerChristian Brauner <brauner@kernel.org>
Wed, 19 Mar 2025 09:04:22 +0000 (10:04 +0100)
rolling_buffer_load_from_ra() looms large in the perf report because it
loops around doing an atomic clear for each of the three mark bits per
folio.  However, this is both inefficient (it would be better to build a
mask and atomically AND them out) and unnecessary as they shouldn't be set.

Fix this by removing the loop.

Fixes: ee4cdf7ba857 ("netfs: Speed up buffered reading")
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20250314164201.1993231-4-dhowells@redhat.com
Acked-by: "Paulo Alcantara (Red Hat)" <pc@manguebit.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: Steve French <sfrench@samba.org>
cc: Paulo Alcantara <pc@manguebit.com>
cc: netfs@lists.linux.dev
cc: linux-cifs@vger.kernel.org
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/netfs/rolling_buffer.c

index 75d97af14b4ab02c0df8eb9b5e70049c5bd44d7c..207b6a32665129ff5e4fbd690e4fbceaa2ad98fb 100644 (file)
@@ -146,10 +146,6 @@ ssize_t rolling_buffer_load_from_ra(struct rolling_buffer *roll,
 
        /* Store the counter after setting the slot. */
        smp_store_release(&roll->next_head_slot, to);
-
-       for (; ix < folioq_nr_slots(fq); ix++)
-               folioq_clear(fq, ix);
-
        return size;
 }