From de85778875703c3366009adc2b1f2a5663d3f3a7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 4 Mar 2024 12:33:05 +0100 Subject: [PATCH] 6.6-stable patches added patches: nfs-fix-data-corruption-caused-by-congestion.patch --- ...data-corruption-caused-by-congestion.patch | 39 +++++++++++++++++++ queue-6.6/series | 1 + 2 files changed, 40 insertions(+) create mode 100644 queue-6.6/nfs-fix-data-corruption-caused-by-congestion.patch diff --git a/queue-6.6/nfs-fix-data-corruption-caused-by-congestion.patch b/queue-6.6/nfs-fix-data-corruption-caused-by-congestion.patch new file mode 100644 index 00000000000..23a764705c8 --- /dev/null +++ b/queue-6.6/nfs-fix-data-corruption-caused-by-congestion.patch @@ -0,0 +1,39 @@ +From neilb@suse.de Mon Mar 4 12:29:59 2024 +From: "NeilBrown" +Date: Wed, 28 Feb 2024 10:23:31 +1100 +Subject: NFS: Fix data corruption caused by congestion. +To: stable@vger.kernel.org, Trond Myklebust , Anna Schumaker +Cc: linux-nfs@vger.kernel.org +Message-ID: <170907621128.24797.4390391329078744015@noble.neil.brown.name> + +when AOP_WRITEPAGE_ACTIVATE is returned (as NFS does when it detects +congestion) it is important that the folio is redirtied. +nfs_writepage_locked() doesn't do this, so files can become corrupted as +writes can be lost. + +Note that this is not needed in v6.8 as AOP_WRITEPAGE_ACTIVATE cannot be +returned. It is needed for kernels v5.18..v6.7. Prior to 6.3 the patch +is different as it needs to mention "page", not "folio". + +Reported-and-tested-by: Jacek Tomaka +Fixes: 6df25e58532b ("nfs: remove reliance on bdi congestion") +Signed-off-by: NeilBrown +Signed-off-by: Greg Kroah-Hartman +--- + fs/nfs/write.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/fs/nfs/write.c ++++ b/fs/nfs/write.c +@@ -668,8 +668,10 @@ static int nfs_writepage_locked(struct f + int err; + + if (wbc->sync_mode == WB_SYNC_NONE && +- NFS_SERVER(inode)->write_congested) ++ NFS_SERVER(inode)->write_congested) { ++ folio_redirty_for_writepage(wbc, folio); + return AOP_WRITEPAGE_ACTIVATE; ++ } + + nfs_inc_stats(inode, NFSIOS_VFSWRITEPAGE); + nfs_pageio_init_write(&pgio, inode, 0, false, diff --git a/queue-6.6/series b/queue-6.6/series index 1d050adcbce..2787a27aff2 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -112,3 +112,4 @@ mptcp-fix-snd_wnd-initialization-for-passive-socket.patch mptcp-fix-potential-wake-up-event-loss.patch mptcp-fix-double-free-on-socket-dismantle.patch mptcp-fix-possible-deadlock-in-subflow-diag.patch +nfs-fix-data-corruption-caused-by-congestion.patch -- 2.47.3