]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfs: Defer the emission of trace_netfs_folio()
authorDavid Howells <dhowells@redhat.com>
Tue, 12 May 2026 12:33:49 +0000 (13:33 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 1 Jun 2026 15:46:27 +0000 (17:46 +0200)
[ Upstream commit daeb443b92817021c1234e8eded219e164b7c35d ]

Change netfs_perform_write() to keep the netfs_folio trace value in a
variable and emit it later to make it easier to choose the value displayed.
This is a prerequisite for a subsequent patch.

Closes: https://sashiko.dev/#/patchset/20260414082004.3756080-1-dhowells%40redhat.com
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://patch.msgid.link/20260512123404.719402-13-dhowells@redhat.com
cc: Paulo Alcantara <pc@manguebit.org>
cc: Matthew Wilcox <willy@infradead.org>
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
Stable-dep-of: 7b4dcf1b9455 ("netfs: Fix streaming write being overwritten")
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/netfs/buffered_write.c

index be77a137cc8711e9709cf4878fd0ad8bf2f25ce7..48c66d26e7b7ee716178f612dad61b46b1dd2bf1 100644 (file)
@@ -143,6 +143,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
        }
 
        do {
+               enum netfs_folio_trace trace;
                struct netfs_folio *finfo;
                struct netfs_group *group;
                unsigned long long fpos;
@@ -216,7 +217,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                        if (unlikely(copied == 0))
                                goto copy_failed;
                        netfs_set_group(folio, netfs_group);
-                       trace_netfs_folio(folio, netfs_folio_is_uptodate);
+                       trace = netfs_folio_is_uptodate;
                        goto copied;
                }
 
@@ -232,7 +233,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                        zero_user_segment(&folio->page, offset + copied, flen);
                        __netfs_set_group(folio, netfs_group);
                        folio_mark_uptodate(folio);
-                       trace_netfs_folio(folio, netfs_modify_and_clear);
+                       trace = netfs_modify_and_clear;
                        goto copied;
                }
 
@@ -250,7 +251,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                        }
                        __netfs_set_group(folio, netfs_group);
                        folio_mark_uptodate(folio);
-                       trace_netfs_folio(folio, netfs_whole_folio_modify);
+                       trace = netfs_whole_folio_modify;
                        goto copied;
                }
 
@@ -277,7 +278,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                        if (unlikely(copied == 0))
                                goto copy_failed;
                        netfs_set_group(folio, netfs_group);
-                       trace_netfs_folio(folio, netfs_just_prefetch);
+                       trace = netfs_just_prefetch;
                        goto copied;
                }
 
@@ -291,7 +292,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                        if (offset == 0 && copied == flen) {
                                __netfs_set_group(folio, netfs_group);
                                folio_mark_uptodate(folio);
-                               trace_netfs_folio(folio, netfs_streaming_filled_page);
+                               trace = netfs_streaming_filled_page;
                                goto copied;
                        }
 
@@ -306,7 +307,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                        finfo->dirty_len = copied;
                        folio_attach_private(folio, (void *)((unsigned long)finfo |
                                                             NETFS_FOLIO_INFO));
-                       trace_netfs_folio(folio, netfs_streaming_write);
+                       trace = netfs_streaming_write;
                        goto copied;
                }
 
@@ -326,9 +327,9 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                                        folio_detach_private(folio);
                                folio_mark_uptodate(folio);
                                kfree(finfo);
-                               trace_netfs_folio(folio, netfs_streaming_cont_filled_page);
+                               trace = netfs_streaming_cont_filled_page;
                        } else {
-                               trace_netfs_folio(folio, netfs_streaming_write_cont);
+                               trace = netfs_streaming_write_cont;
                        }
                        goto copied;
                }
@@ -344,6 +345,7 @@ ssize_t netfs_perform_write(struct kiocb *iocb, struct iov_iter *iter,
                continue;
 
        copied:
+               trace_netfs_folio(folio, trace);
                flush_dcache_folio(folio);
 
                /* Update the inode size if we moved the EOF marker */