All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: sandeen@sandeen.net, djwong@kernel.org
Cc: Christoph Hellwig <hch@lst.de>,
	Chandan Babu R <chandanrlinux@gmail.com>,
	linux-xfs@vger.kernel.org
Subject: [PATCH 09/45] xfs: make xfs_rtalloc_query_range input parameters const
Date: Wed, 19 Jan 2022 16:18:12 -0800	[thread overview]
Message-ID: <164263789222.860211.17077294228532604196.stgit@magnolia> (raw)
In-Reply-To: <164263784199.860211.7509808171577819673.stgit@magnolia>

From: Darrick J. Wong <djwong@kernel.org>

Source kernel commit: c02f6529864a4f5f91d216d324bac4ba75415d19

In commit 8ad560d2565e, we changed xfs_rtalloc_query_range to constrain
the range of bits in the realtime bitmap file that would actually be
searched.  In commit a3a374bf1889, we changed the range again
(incorrectly), leading to the fix in commit d88850bd5516, which finally
corrected the range check code.  Unfortunately, the author never noticed
that the function modifies its input parameters, which is a totaly no-no
since none of the other range query functions change their input
parameters.

So, fix this function yet again to stash the upper end of the query
range (i.e. the high key) in a local variable and hope this is the last
time I have to fix my own function.  While we're at it, mark the key
inputs const so nobody makes this mistake again. :(

Fixes: 8ad560d2565e ("xfs: strengthen rtalloc query range checks")
Not-fixed-by: a3a374bf1889 ("xfs: fix off-by-one error in xfs_rtalloc_query_range")
Not-fixed-by: d88850bd5516 ("xfs: fix high key handling in the rt allocator's query_range function")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Chandan Babu R <chandanrlinux@gmail.com>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
 libxfs/libxfs_priv.h  |   10 +++++-----
 libxfs/xfs_rtbitmap.c |   14 +++++++-------
 2 files changed, 12 insertions(+), 12 deletions(-)


diff --git a/libxfs/libxfs_priv.h b/libxfs/libxfs_priv.h
index 15bae1ff..0214919c 100644
--- a/libxfs/libxfs_priv.h
+++ b/libxfs/libxfs_priv.h
@@ -602,9 +602,9 @@ struct xfs_rtalloc_rec {
 };
 
 typedef int (*xfs_rtalloc_query_range_fn)(
-	struct xfs_trans	*tp,
-	struct xfs_rtalloc_rec	*rec,
-	void			*priv);
+	struct xfs_trans		*tp,
+	const struct xfs_rtalloc_rec	*rec,
+	void				*priv);
 
 int libxfs_zero_extent(struct xfs_inode *ip, xfs_fsblock_t start_fsb,
                         xfs_off_t count_fsb);
@@ -698,8 +698,8 @@ int xfs_rtfree_range(struct xfs_mount *mp, struct xfs_trans *tp,
 		     xfs_rtblock_t start, xfs_extlen_t len,
 		     struct xfs_buf **rbpp, xfs_fsblock_t *rsb);
 int xfs_rtalloc_query_range(struct xfs_trans *tp,
-			    struct xfs_rtalloc_rec *low_rec,
-			    struct xfs_rtalloc_rec *high_rec,
+			    const struct xfs_rtalloc_rec *low_rec,
+			    const struct xfs_rtalloc_rec *high_rec,
 			    xfs_rtalloc_query_range_fn fn,
 			    void *priv);
 int xfs_rtalloc_query_all(struct xfs_trans *tp,
diff --git a/libxfs/xfs_rtbitmap.c b/libxfs/xfs_rtbitmap.c
index f08efb7c..15da0496 100644
--- a/libxfs/xfs_rtbitmap.c
+++ b/libxfs/xfs_rtbitmap.c
@@ -1007,8 +1007,8 @@ xfs_rtfree_extent(
 int
 xfs_rtalloc_query_range(
 	struct xfs_trans		*tp,
-	struct xfs_rtalloc_rec		*low_rec,
-	struct xfs_rtalloc_rec		*high_rec,
+	const struct xfs_rtalloc_rec	*low_rec,
+	const struct xfs_rtalloc_rec	*high_rec,
 	xfs_rtalloc_query_range_fn	fn,
 	void				*priv)
 {
@@ -1016,6 +1016,7 @@ xfs_rtalloc_query_range(
 	struct xfs_mount		*mp = tp->t_mountp;
 	xfs_rtblock_t			rtstart;
 	xfs_rtblock_t			rtend;
+	xfs_rtblock_t			high_key;
 	int				is_free;
 	int				error = 0;
 
@@ -1024,12 +1025,12 @@ xfs_rtalloc_query_range(
 	if (low_rec->ar_startext >= mp->m_sb.sb_rextents ||
 	    low_rec->ar_startext == high_rec->ar_startext)
 		return 0;
-	high_rec->ar_startext = min(high_rec->ar_startext,
-			mp->m_sb.sb_rextents - 1);
+
+	high_key = min(high_rec->ar_startext, mp->m_sb.sb_rextents - 1);
 
 	/* Iterate the bitmap, looking for discrepancies. */
 	rtstart = low_rec->ar_startext;
-	while (rtstart <= high_rec->ar_startext) {
+	while (rtstart <= high_key) {
 		/* Is the first block free? */
 		error = xfs_rtcheck_range(mp, tp, rtstart, 1, 1, &rtend,
 				&is_free);
@@ -1037,8 +1038,7 @@ xfs_rtalloc_query_range(
 			break;
 
 		/* How long does the extent go for? */
-		error = xfs_rtfind_forw(mp, tp, rtstart,
-				high_rec->ar_startext, &rtend);
+		error = xfs_rtfind_forw(mp, tp, rtstart, high_key, &rtend);
 		if (error)
 			break;
 


  parent reply	other threads:[~2022-01-20  0:18 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-20  0:17 [PATCHSET 00/45] xfsprogs: sync libxfs with 5.15 Darrick J. Wong
2022-01-20  0:17 ` [PATCH 01/45] xfsprogs: fix static build problems caused by liburcu Darrick J. Wong
2022-01-20  0:17 ` [PATCH 02/45] xfs_{copy,db,logprint,repair}: pass xfs_mount pointers instead of xfs_sb pointers Darrick J. Wong
2022-01-28 22:01   ` Eric Sandeen
2022-01-20  0:17 ` [PATCH 03/45] xfs: remove support for disabling quota accounting on a mounted file system Darrick J. Wong
2022-01-20  0:17 ` [PATCH 04/45] xfs: remove the active vs running quota differentiation Darrick J. Wong
2022-01-20  0:17 ` [PATCH 05/45] xfs: replace kmem_alloc_large() with kvmalloc() Darrick J. Wong
2022-01-20  0:17 ` [PATCH 06/45] xfs: allow setting and clearing of log incompat feature flags Darrick J. Wong
2022-01-20  0:18 ` [PATCH 07/45] xfs: add attr state machine tracepoints Darrick J. Wong
2022-01-20  0:18 ` [PATCH 08/45] xfs: Rename __xfs_attr_rmtval_remove Darrick J. Wong
2022-01-20  0:18 ` Darrick J. Wong [this message]
2022-01-20  0:18 ` [PATCH 10/45] xfs: make the key parameters to all btree key comparison functions const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 11/45] xfs: make the key parameters to all btree query range " Darrick J. Wong
2022-01-20  0:18 ` [PATCH 12/45] xfs: make the record pointer passed to query_range " Darrick J. Wong
2022-01-20  0:18 ` [PATCH 13/45] xfs: mark the record passed into btree init_key functions as const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 14/45] xfs: make the keys and records passed to btree inorder functions const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 15/45] xfs: mark the record passed into xchk_btree functions as const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 16/45] xfs: make the pointer passed to btree set_root functions const Darrick J. Wong
2022-01-20  0:18 ` [PATCH 17/45] xfs: make the start pointer passed to btree alloc_block " Darrick J. Wong
2022-01-20  0:19 ` [PATCH 18/45] xfs: make the start pointer passed to btree update_lastrec " Darrick J. Wong
2022-01-20  0:19 ` [PATCH 19/45] xfs: constify btree function parameters that are not modified Darrick J. Wong
2022-01-20  0:19 ` [PATCH 20/45] xfs: resolve fork names in trace output Darrick J. Wong
2022-01-20  0:19 ` [PATCH 21/45] xfs: sb verifier doesn't handle uncached sb buffer Darrick J. Wong
2022-01-20  0:19 ` [PATCH 22/45] xfs: rename xfs_has_attr() Darrick J. Wong
2022-01-20  0:19 ` [PATCH 23/45] xfs: rework attr2 feature and mount options Darrick J. Wong
2022-01-20  0:19 ` [PATCH 24/45] xfs: reflect sb features in xfs_mount Darrick J. Wong
2022-01-20  0:19 ` [PATCH 25/45] xfs: replace xfs_sb_version checks with feature flag checks Darrick J. Wong
2022-01-20  0:19 ` [PATCH 26/45] xfs: convert mount flags to features Darrick J. Wong
2022-01-31 22:59   ` Eric Sandeen
2022-01-31 23:31     ` Darrick J. Wong
2022-01-20  0:19 ` [PATCH 27/45] xfs: convert remaining mount flags to state flags Darrick J. Wong
2022-01-20  0:19 ` [PATCH 28/45] xfs: replace XFS_FORCED_SHUTDOWN with xfs_is_shutdown Darrick J. Wong
2022-01-20  0:20 ` [PATCH 29/45] xfs: convert xfs_fs_geometry to use mount feature checks Darrick J. Wong
2022-01-20  0:20 ` [PATCH 30/45] xfs: open code sb verifier " Darrick J. Wong
2022-01-20  0:20 ` [PATCH 31/45] xfs: convert xfs_sb_version_has checks to use mount features Darrick J. Wong
2022-01-20  0:20 ` [PATCH 32/45] libxlog: replace xfs_sb_version checks with feature flag checks Darrick J. Wong
2022-01-28 22:03   ` Eric Sandeen
2022-01-20  0:20 ` [PATCH 33/45] libxfs: " Darrick J. Wong
2022-01-28 22:13   ` Eric Sandeen
2022-01-28 22:18     ` Darrick J. Wong
2022-01-20  0:20 ` [PATCH 34/45] xfs_{copy,db,logprint,repair}: " Darrick J. Wong
2022-01-28 22:16   ` Eric Sandeen
2022-01-20  0:20 ` [PATCH 35/45] xfs: remove unused xfs_sb_version_has wrappers Darrick J. Wong
2022-01-20  0:20 ` [PATCH 36/45] xfs: introduce xfs_sb_is_v5 helper Darrick J. Wong
2022-01-20  0:20 ` [PATCH 37/45] xfs: kill xfs_sb_version_has_v3inode() Darrick J. Wong
2022-01-20  0:20 ` [PATCH 38/45] libxfs: use opstate flags and functions for libxfs mount options Darrick J. Wong
2022-01-27 20:43   ` Eric Sandeen
2022-01-20  0:20 ` [PATCH 39/45] libxfs: remove pointless *XFS_MOUNT* flags Darrick J. Wong
2022-01-27 23:03   ` Eric Sandeen
2022-01-28  0:53     ` Darrick J. Wong
2022-01-28 20:01   ` Eric Sandeen
2022-01-28 21:59     ` Darrick J. Wong
2022-01-28 22:43   ` [PATCH v1.1 " Darrick J. Wong
2022-01-28 22:59     ` Eric Sandeen
2022-01-31 21:29     ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 40/45] libxfs: clean up remaining LIBXFS_MOUNT flags Darrick J. Wong
2022-01-28 20:12   ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 41/45] libxfs: always initialize internal buffer map Darrick J. Wong
2022-01-28 20:31   ` Eric Sandeen
2022-01-28 22:03     ` Darrick J. Wong
2022-01-28 22:27       ` Eric Sandeen
2022-01-31 20:30   ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 42/45] libxfs: replace XFS_BUF_SET_ADDR with a function Darrick J. Wong
2022-01-28 20:53   ` Eric Sandeen
2022-01-28 23:04     ` Darrick J. Wong
2022-01-31 20:44       ` Eric Sandeen
2022-01-20  0:21 ` [PATCH 43/45] xfs: introduce xfs_buf_daddr() Darrick J. Wong
2022-01-20  0:21 ` [PATCH 44/45] xfs: convert bp->b_bn references to xfs_buf_daddr() Darrick J. Wong
2022-01-20  0:21 ` [PATCH 45/45] libxfs: rename buffer cache index variable b_bn Darrick J. Wong
2022-01-28 21:37   ` Eric Sandeen
2022-01-28 22:14     ` Darrick J. Wong
2022-01-28 22:31       ` Eric Sandeen
2022-01-28 20:54 ` [PATCHSET 00/45] xfsprogs: sync libxfs with 5.15 Eric Sandeen

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=164263789222.860211.17077294228532604196.stgit@magnolia \
    --to=djwong@kernel.org \
    --cc=chandanrlinux@gmail.com \
    --cc=hch@lst.de \
    --cc=linux-xfs@vger.kernel.org \
    --cc=sandeen@sandeen.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.