public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Chandan Babu R <chandan.babu@oracle.com>
Cc: "Darrick J. Wong" <djwong@kernel.org>,
	Dave Chinner <david@fromorbit.com>,
	linux-xfs@vger.kernel.org
Subject: [PATCH 02/10] xfs: move RT inode locking out of __xfs_bunmapi
Date: Fri, 23 Feb 2024 08:14:58 +0100	[thread overview]
Message-ID: <20240223071506.3968029-3-hch@lst.de> (raw)
In-Reply-To: <20240223071506.3968029-1-hch@lst.de>

__xfs_bunmapi is a bit of an odd place to lock the rtbitmap and rtsummary
inodes given that it is very high level code.  While this only looks ugly
right now, it will become a problem when supporting delayed allocations
for RT inodes as __xfs_bunmapi might end up deleting only delalloc extents
and thus never unlock the rt inodes.

Move the locking into xfs_rtfree_blocks instead (where it will also be
helpful once we support extfree items for RT allocations), and use a new
flag in the transaction to ensure they aren't locked twice.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/xfs/libxfs/xfs_bmap.c     | 10 ----------
 fs/xfs/libxfs/xfs_rtbitmap.c | 14 ++++++++++++++
 fs/xfs/libxfs/xfs_shared.h   |  3 +++
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index b525524a2da4ef..f8cc7c510d7bd5 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -5321,16 +5321,6 @@ __xfs_bunmapi(
 	} else
 		cur = NULL;
 
-	if (isrt) {
-		/*
-		 * Synchronize by locking the bitmap inode.
-		 */
-		xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL|XFS_ILOCK_RTBITMAP);
-		xfs_trans_ijoin(tp, mp->m_rbmip, XFS_ILOCK_EXCL);
-		xfs_ilock(mp->m_rsumip, XFS_ILOCK_EXCL|XFS_ILOCK_RTSUM);
-		xfs_trans_ijoin(tp, mp->m_rsumip, XFS_ILOCK_EXCL);
-	}
-
 	extno = 0;
 	while (end != (xfs_fileoff_t)-1 && end >= start &&
 	       (nexts == 0 || extno < nexts)) {
diff --git a/fs/xfs/libxfs/xfs_rtbitmap.c b/fs/xfs/libxfs/xfs_rtbitmap.c
index e31663cb7b4349..2759c48390241d 100644
--- a/fs/xfs/libxfs/xfs_rtbitmap.c
+++ b/fs/xfs/libxfs/xfs_rtbitmap.c
@@ -1001,6 +1001,20 @@ xfs_rtfree_blocks(
 		return -EIO;
 	}
 
+	/*
+	 * Ensure the bitmap and summary inodes are locked before modifying
+	 * them.  We can get called multiples times per transaction, so record
+	 * the fact that they are locked in the transaction.
+	 */
+	if (!(tp->t_flags & XFS_TRANS_RTBITMAP_LOCKED)) {
+		tp->t_flags |= XFS_TRANS_RTBITMAP_LOCKED;
+
+		xfs_ilock(mp->m_rbmip, XFS_ILOCK_EXCL|XFS_ILOCK_RTBITMAP);
+		xfs_trans_ijoin(tp, mp->m_rbmip, XFS_ILOCK_EXCL);
+		xfs_ilock(mp->m_rsumip, XFS_ILOCK_EXCL|XFS_ILOCK_RTSUM);
+		xfs_trans_ijoin(tp, mp->m_rsumip, XFS_ILOCK_EXCL);
+	}
+
 	return xfs_rtfree_extent(tp, start, len);
 }
 
diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h
index 6f1cedb850eb39..1598ff00f6805f 100644
--- a/fs/xfs/libxfs/xfs_shared.h
+++ b/fs/xfs/libxfs/xfs_shared.h
@@ -83,6 +83,9 @@ void	xfs_log_get_max_trans_res(struct xfs_mount *mp,
  */
 #define XFS_TRANS_LOWMODE		(1u << 8)
 
+/* Transaction has locked the rtbitmap and rtsum inodes */
+#define XFS_TRANS_RTBITMAP_LOCKED	(1u << 9)
+
 /*
  * Field values for xfs_trans_mod_sb.
  */
-- 
2.39.2


  parent reply	other threads:[~2024-02-23  7:15 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-23  7:14 bring back RT delalloc support v2 Christoph Hellwig
2024-02-23  7:14 ` [PATCH 01/10] xfs: make XFS_TRANS_LOWMODE match the other XFS_TRANS_ definitions Christoph Hellwig
2024-02-23 16:29   ` Darrick J. Wong
2024-02-23  7:14 ` Christoph Hellwig [this message]
2024-02-23 16:34   ` [PATCH 02/10] xfs: move RT inode locking out of __xfs_bunmapi Darrick J. Wong
2024-02-23 16:37     ` Christoph Hellwig
2024-02-23 16:46       ` Darrick J. Wong
2024-02-23 16:49         ` Christoph Hellwig
2024-02-23 17:30           ` Darrick J. Wong
2024-02-23  7:14 ` [PATCH 03/10] xfs: block deltas in xfs_trans_unreserve_and_mod_sb must be positive Christoph Hellwig
2024-02-23 16:52   ` Darrick J. Wong
2024-02-23  7:15 ` [PATCH 04/10] xfs: split xfs_mod_freecounter Christoph Hellwig
2024-02-23 17:09   ` Darrick J. Wong
2024-02-23 17:18     ` Christoph Hellwig
2024-02-23 17:28       ` Darrick J. Wong
2024-02-23  7:15 ` [PATCH 05/10] xfs: reinstate RT support in xfs_bmapi_reserve_delalloc Christoph Hellwig
2024-02-23 17:12   ` Darrick J. Wong
2024-02-23  7:15 ` [PATCH 06/10] xfs: cleanup fdblock/frextent accounting in xfs_bmap_del_extent_delay Christoph Hellwig
2024-02-23 17:13   ` Darrick J. Wong
2024-02-23 17:15     ` Christoph Hellwig
2024-02-23  7:15 ` [PATCH 07/10] xfs: support RT inodes in xfs_mod_delalloc Christoph Hellwig
2024-02-23 17:20   ` Darrick J. Wong
2024-02-23 17:22     ` Christoph Hellwig
2024-02-23 17:29       ` Darrick J. Wong
2024-02-23 17:30         ` Christoph Hellwig
2024-02-23  7:15 ` [PATCH 08/10] xfs: look at m_frextents in xfs_iomap_prealloc_size for RT allocations Christoph Hellwig
2024-02-23 17:21   ` Darrick J. Wong
2024-02-23  7:15 ` [PATCH 09/10] xfs: stop the steal (of data blocks for RT indirect blocks) Christoph Hellwig
2024-02-23 17:25   ` Darrick J. Wong
2024-02-23  7:15 ` [PATCH 10/10] xfs: reinstate delalloc for RT inodes (if sb_rextsize == 1) Christoph Hellwig
2024-02-23 17:26   ` Darrick J. Wong
  -- strict thread matches above, loose matches on Subject: below --
2024-02-26 10:04 bring back RT delalloc support v3 Christoph Hellwig
2024-02-26 10:04 ` [PATCH 02/10] xfs: move RT inode locking out of __xfs_bunmapi Christoph Hellwig

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=20240223071506.3968029-3-hch@lst.de \
    --to=hch@lst.de \
    --cc=chandan.babu@oracle.com \
    --cc=david@fromorbit.com \
    --cc=djwong@kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    /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