XFS stable LTS mailing list
 help / color / mirror / Atom feed
From: <gregkh@linuxfoundation.org>
To: cem@kernel.org,dchinner@redhat.com,djwong@kernel.org,gregkh@linuxfoundation.org,hch@lst.de,xfs-stable@lists.linux.dev
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "xfs: flush inodegc before swapon" has been added to the 6.12-stable tree
Date: Tue, 29 Apr 2025 09:35:13 +0200	[thread overview]
Message-ID: <2025042913-silenced-outfit-ecfb@gregkh> (raw)
In-Reply-To: <174586545460.480536.4621928282923794223.stgit@frogsfrogsfrogs>


This is a note to let you know that I've just added the patch titled

    xfs: flush inodegc before swapon

to the 6.12-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     xfs-flush-inodegc-before-swapon.patch
and it can be found in the queue-6.12 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


From stable+bounces-136941-greg=kroah.com@vger.kernel.org Mon Apr 28 20:40:13 2025
From: "Darrick J. Wong" <djwong@kernel.org>
Date: Mon, 28 Apr 2025 11:40:06 -0700
Subject: xfs: flush inodegc before swapon
To: djwong@kernel.org, xfs-stable@lists.linux.dev
Cc: cem@kernel.org, dchinner@redhat.com, hch@lst.de, stable@vger.kernel.org
Message-ID: <174586545460.480536.4621928282923794223.stgit@frogsfrogsfrogs>

From: Christoph Hellwig <hch@lst.de>

Commit 2d873efd174bae9005776937d5ac6a96050266db upstream

Fix the brand new xfstest that tries to swapon on a recently unshared
file and use the chance to document the other bit of magic in this
function.

The big comment is taken from a mailinglist post by Dave Chinner.

Fixes: 5e672cd69f0a53 ("xfs: introduce xfs_inodegc_push()")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 fs/xfs/xfs_aops.c |   35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)


--- a/fs/xfs/xfs_aops.c
+++ b/fs/xfs/xfs_aops.c
@@ -19,6 +19,7 @@
 #include "xfs_reflink.h"
 #include "xfs_errortag.h"
 #include "xfs_error.h"
+#include "xfs_icache.h"
 
 struct xfs_writepage_ctx {
 	struct iomap_writepage_ctx ctx;
@@ -533,7 +534,39 @@ xfs_vm_swap_activate(
 	struct file			*swap_file,
 	sector_t			*span)
 {
-	sis->bdev = xfs_inode_buftarg(XFS_I(file_inode(swap_file)))->bt_bdev;
+	struct xfs_inode		*ip = XFS_I(file_inode(swap_file));
+
+	/*
+	 * Swap file activation can race against concurrent shared extent
+	 * removal in files that have been cloned.  If this happens,
+	 * iomap_swapfile_iter() can fail because it encountered a shared
+	 * extent even though an operation is in progress to remove those
+	 * shared extents.
+	 *
+	 * This race becomes problematic when we defer extent removal
+	 * operations beyond the end of a syscall (i.e. use async background
+	 * processing algorithms).  Users think the extents are no longer
+	 * shared, but iomap_swapfile_iter() still sees them as shared
+	 * because the refcountbt entries for the extents being removed have
+	 * not yet been updated.  Hence the swapon call fails unexpectedly.
+	 *
+	 * The race condition is currently most obvious from the unlink()
+	 * operation as extent removal is deferred until after the last
+	 * reference to the inode goes away.  We then process the extent
+	 * removal asynchronously, hence triggers the "syscall completed but
+	 * work not done" condition mentioned above.  To close this race
+	 * window, we need to flush any pending inodegc operations to ensure
+	 * they have updated the refcountbt records before we try to map the
+	 * swapfile.
+	 */
+	xfs_inodegc_flush(ip->i_mount);
+
+	/*
+	 * Direct the swap code to the correct block device when this file
+	 * sits on the RT device.
+	 */
+	sis->bdev = xfs_inode_buftarg(ip)->bt_bdev;
+
 	return iomap_swapfile_activate(sis, swap_file, span,
 			&xfs_read_iomap_ops);
 }


Patches currently in stable-queue which might be from djwong@kernel.org are

queue-6.12/xfs-do-not-check-needsrepair-if-ro-norecovery-mount.patch
queue-6.12/xfs-do-not-allow-norecovery-mount-with-quotacheck.patch
queue-6.12/iomap-skip-unnecessary-ifs_block_is_uptodate-check.patch
queue-6.12/xfs-flush-inodegc-before-swapon.patch
queue-6.12/xfs-rename-xfs_iomap_swapfile_activate-to-xfs_vm_swap_activate.patch

      reply	other threads:[~2025-04-29  7:35 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-28 18:39 [PATCHSET 6.12] xfs: backported fixes from upstream Darrick J. Wong
2025-04-28 18:39 ` [PATCH 1/4] xfs: do not check NEEDSREPAIR if ro,norecovery mount Darrick J. Wong
2025-04-29  7:35   ` Patch "xfs: do not check NEEDSREPAIR if ro,norecovery mount." has been added to the 6.12-stable tree gregkh
2025-04-28 18:39 ` [PATCH 2/4] xfs: Do not allow norecovery mount with quotacheck Darrick J. Wong
2025-04-29  7:35   ` Patch "xfs: Do not allow norecovery mount with quotacheck" has been added to the 6.12-stable tree gregkh
2025-04-28 18:39 ` [PATCH 3/4] xfs: rename xfs_iomap_swapfile_activate to xfs_vm_swap_activate Darrick J. Wong
2025-04-29  7:35   ` Patch "xfs: rename xfs_iomap_swapfile_activate to xfs_vm_swap_activate" has been added to the 6.12-stable tree gregkh
2025-04-28 18:40 ` [PATCH 4/4] xfs: flush inodegc before swapon Darrick J. Wong
2025-04-29  7:35   ` gregkh [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2025042913-silenced-outfit-ecfb@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=cem@kernel.org \
    --cc=dchinner@redhat.com \
    --cc=djwong@kernel.org \
    --cc=hch@lst.de \
    --cc=stable-commits@vger.kernel.org \
    --cc=xfs-stable@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox