* [PATCH 08/10] netfs: Use folio_next_pos()
[not found] <20251024170822.1427218-1-willy@infradead.org>
@ 2025-10-24 17:08 ` Matthew Wilcox (Oracle)
2025-10-24 17:36 ` Paulo Alcantara
2025-10-27 14:16 ` David Howells
1 sibling, 1 reply; 4+ messages in thread
From: Matthew Wilcox (Oracle) @ 2025-10-24 17:08 UTC (permalink / raw)
To: linux-fsdevel, Christian Brauner
Cc: Matthew Wilcox (Oracle), David Howells, Paulo Alcantara, netfs
This is one instruction more efficient than open-coding folio_pos() +
folio_size(). It's the equivalent of (x + y) << z rather than
x << z + y << z.
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: David Howells <dhowells@redhat.com>
Cc: Paulo Alcantara <pc@manguebit.org>
Cc: netfs@lists.linux.dev
---
fs/netfs/buffered_write.c | 2 +-
fs/netfs/misc.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/netfs/buffered_write.c b/fs/netfs/buffered_write.c
index 09394ac2c180..f9d62abef2ac 100644
--- a/fs/netfs/buffered_write.c
+++ b/fs/netfs/buffered_write.c
@@ -535,7 +535,7 @@ vm_fault_t netfs_page_mkwrite(struct vm_fault *vmf, struct netfs_group *netfs_gr
folio_unlock(folio);
err = filemap_fdatawrite_range(mapping,
folio_pos(folio),
- folio_pos(folio) + folio_size(folio));
+ folio_next_pos(folio));
switch (err) {
case 0:
ret = VM_FAULT_RETRY;
diff --git a/fs/netfs/misc.c b/fs/netfs/misc.c
index 486166460e17..82342c6d22cb 100644
--- a/fs/netfs/misc.c
+++ b/fs/netfs/misc.c
@@ -298,7 +298,7 @@ bool netfs_release_folio(struct folio *folio, gfp_t gfp)
if (folio_test_dirty(folio))
return false;
- end = umin(folio_pos(folio) + folio_size(folio), i_size_read(&ctx->inode));
+ end = umin(folio_next_pos(folio), i_size_read(&ctx->inode));
if (end > ctx->zero_point)
ctx->zero_point = end;
--
2.47.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 08/10] netfs: Use folio_next_pos()
2025-10-24 17:08 ` [PATCH 08/10] netfs: Use folio_next_pos() Matthew Wilcox (Oracle)
@ 2025-10-24 17:36 ` Paulo Alcantara
0 siblings, 0 replies; 4+ messages in thread
From: Paulo Alcantara @ 2025-10-24 17:36 UTC (permalink / raw)
To: Matthew Wilcox (Oracle), linux-fsdevel, Christian Brauner
Cc: Matthew Wilcox (Oracle), David Howells, netfs
"Matthew Wilcox (Oracle)" <willy@infradead.org> writes:
> This is one instruction more efficient than open-coding folio_pos() +
> folio_size(). It's the equivalent of (x + y) << z rather than
> x << z + y << z.
>
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Cc: David Howells <dhowells@redhat.com>
> Cc: Paulo Alcantara <pc@manguebit.org>
> Cc: netfs@lists.linux.dev
Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 08/10] netfs: Use folio_next_pos()
[not found] <20251024170822.1427218-1-willy@infradead.org>
2025-10-24 17:08 ` [PATCH 08/10] netfs: Use folio_next_pos() Matthew Wilcox (Oracle)
@ 2025-10-27 14:16 ` David Howells
2025-10-27 14:50 ` Matthew Wilcox
1 sibling, 1 reply; 4+ messages in thread
From: David Howells @ 2025-10-27 14:16 UTC (permalink / raw)
To: Matthew Wilcox (Oracle)
Cc: dhowells, linux-fsdevel, Christian Brauner, Paulo Alcantara,
netfs
Matthew Wilcox (Oracle) <willy@infradead.org> wrote:
> This is one instruction more efficient than open-coding folio_pos() +
> folio_size(). It's the equivalent of (x + y) << z rather than
> x << z + y << z.
Should that be noted to the gcc bugzilla as a missed optimisation?
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Cc: David Howells <dhowells@redhat.com>
> Cc: Paulo Alcantara <pc@manguebit.org>
> Cc: netfs@lists.linux.dev
Acked-by: David Howells <dhowells@redhat.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 08/10] netfs: Use folio_next_pos()
2025-10-27 14:16 ` David Howells
@ 2025-10-27 14:50 ` Matthew Wilcox
0 siblings, 0 replies; 4+ messages in thread
From: Matthew Wilcox @ 2025-10-27 14:50 UTC (permalink / raw)
To: David Howells; +Cc: linux-fsdevel, Christian Brauner, Paulo Alcantara, netfs
On Mon, Oct 27, 2025 at 02:16:45PM +0000, David Howells wrote:
> Matthew Wilcox (Oracle) <willy@infradead.org> wrote:
>
> > This is one instruction more efficient than open-coding folio_pos() +
> > folio_size(). It's the equivalent of (x + y) << z rather than
> > x << z + y << z.
>
> Should that be noted to the gcc bugzilla as a missed optimisation?
I don't know? Maybe there's a Law Of C Arithmetic that prevents it
from doing this optimisation that we can ignore because we know that
the calculation will never overflow.
I tried with both gcc and LLVM and both produce better code for g()
than for f():
https://godbolt.org/z/YTc883f6G
Interestingly, LLVM does better for f() than gcc does, but they produce
identical code for g() (minor difference like using sal instead of shl
but that feels unimportant).
If you want to file optimisation bug(s) against gcc, feel free to use
this example code.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-10-27 14:51 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20251024170822.1427218-1-willy@infradead.org>
2025-10-24 17:08 ` [PATCH 08/10] netfs: Use folio_next_pos() Matthew Wilcox (Oracle)
2025-10-24 17:36 ` Paulo Alcantara
2025-10-27 14:16 ` David Howells
2025-10-27 14:50 ` Matthew Wilcox
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).