Thread (49 messages) 49 messages, 3 authors, 2021-06-02

Re: [PATCH 06/23 V2] xfs: convert xfs_iwalk to use perag references

From: Dave Chinner <david@fromorbit.com>
Date: 2021-06-02 00:34:54

On Tue, Jun 01, 2021 at 04:32:16PM -0700, Darrick J. Wong wrote:
On Wed, Jun 02, 2021 at 08:00:54AM +1000, Dave Chinner wrote:
quoted
From: Dave Chinner <redacted>

Rather than manually walking the ags and passing agnunbers around,
pass the perag for the AG we are currently working on around in the
iwalk structure.

Signed-off-by: Dave Chinner <redacted>
Reviewed-by: Brian Foster <redacted>
---
V2: convert next_agno -> agno in perag walk macros

 fs/xfs/libxfs/xfs_ag.h | 20 +++++++-----
 fs/xfs/xfs_iwalk.c     | 86 +++++++++++++++++++++++++++++++-------------------
 2 files changed, 66 insertions(+), 40 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_ag.h b/fs/xfs/libxfs/xfs_ag.h
index 33783120263c..2e02ec3693c5 100644
--- a/fs/xfs/libxfs/xfs_ag.h
+++ b/fs/xfs/libxfs/xfs_ag.h
@@ -117,19 +117,23 @@ void	xfs_perag_put(struct xfs_perag *pag);
 /*
  * Perag iteration APIs
  */
-#define for_each_perag(mp, next_agno, pag) \
-	for ((next_agno) = 0, (pag) = xfs_perag_get((mp), 0); \
+#define for_each_perag_from(mp, agno, pag) \
+	for ((pag) = xfs_perag_get((mp), (agno)); \
Er... I guess I wasn't clear enough.  I was ok with the "next_agno" name
for for_each_perag_from to reinforce the idea that the caller is
required to initialize the variable before using the macro.

It's the other variants (for_each_perag and for_each_perag_tag) where
the macro initializes @agno so it's not necessary for the caller to have
provided any value at all.

IOWS,

#define for_each_perag_from(mp, next_agno, pag) \
	for ((pag) = xfs_perag_get((mp), (next_agno)); \
		(pag) != NULL; \
		(next_agno) = (pag)->pag_agno + 1, \
		xfs_perag_put(pag), \
		(pag) = xfs_perag_get((mp), (next_agno)))

#define for_each_perag(mp, agno, pag) \
	(agno) = 0; \
	for_each_perag_from((mp), (agno), (pag))

#define for_each_perag_tag(mp, agno, pag, tag) \
	for ((agno) = 0, (pag) = xfs_perag_get_tag((mp), 0, (tag)); \
		(pag) != NULL; \
		(agno) = (pag)->pag_agno + 1, \
		xfs_perag_put(pag), \
		(pag) = xfs_perag_get_tag((mp), (agno), (tag)))
Ok, let me go change that back...

-Dave.
-- 
Dave Chinner
david@fromorbit.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help