* [PATCH] xfs: count free space btree blocks when scrubbing pre-lazysbcount fses
@ 2021-04-27 3:02 Darrick J. Wong
2021-04-27 12:46 ` Brian Foster
2021-04-27 13:22 ` Gao Xiang
0 siblings, 2 replies; 3+ messages in thread
From: Darrick J. Wong @ 2021-04-27 3:02 UTC (permalink / raw)
To: Gao Xiang; +Cc: linux-xfs, Dave Chinner, Zorro Lang
From: Darrick J. Wong <djwong@kernel.org>
Since agf_btreeblks didn't exist before the lazysbcount feature, the fs
summary count scrubber needs to walk the free space btrees to determine
the amount of space being used by those btrees.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
Note: I /think/ the four patches on the list right now fix all the
obvious problems with !lazysbcount filesystems, except for xfs/49[12]
which fuzz the summary counters.
---
fs/xfs/scrub/fscounters.c | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/fs/xfs/scrub/fscounters.c b/fs/xfs/scrub/fscounters.c
index 318b81c0f90d..87476a00de9d 100644
--- a/fs/xfs/scrub/fscounters.c
+++ b/fs/xfs/scrub/fscounters.c
@@ -13,6 +13,7 @@
#include "xfs_alloc.h"
#include "xfs_ialloc.h"
#include "xfs_health.h"
+#include "xfs_btree.h"
#include "scrub/scrub.h"
#include "scrub/common.h"
#include "scrub/trace.h"
@@ -143,6 +144,35 @@ xchk_setup_fscounters(
return xchk_trans_alloc(sc, 0);
}
+/* Count free space btree blocks manually for pre-lazysbcount filesystems. */
+static int
+xchk_fscount_btreeblks(
+ struct xfs_scrub *sc,
+ struct xchk_fscounters *fsc,
+ xfs_agnumber_t agno)
+{
+ xfs_extlen_t blocks;
+ int error;
+
+ error = xchk_ag_init(sc, agno, &sc->sa);
+ if (error)
+ return error;
+
+ error = xfs_btree_count_blocks(sc->sa.bno_cur, &blocks);
+ if (error)
+ goto out_free;
+ fsc->fdblocks += blocks - 1;
+
+ error = xfs_btree_count_blocks(sc->sa.cnt_cur, &blocks);
+ if (error)
+ goto out_free;
+ fsc->fdblocks += blocks - 1;
+
+out_free:
+ xchk_ag_free(sc, &sc->sa);
+ return error;
+}
+
/*
* Calculate what the global in-core counters ought to be from the incore
* per-AG structure. Callers can compare this to the actual in-core counters
@@ -184,6 +214,13 @@ xchk_fscount_aggregate_agcounts(
fsc->fdblocks += pag->pagf_flcount;
if (xfs_sb_version_haslazysbcount(&sc->mp->m_sb))
fsc->fdblocks += pag->pagf_btreeblks;
+ else {
+ error = xchk_fscount_btreeblks(sc, fsc, agno);
+ if (error) {
+ xfs_perag_put(pag);
+ break;
+ }
+ }
/*
* Per-AG reservations are taken out of the incore counters,
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] xfs: count free space btree blocks when scrubbing pre-lazysbcount fses
2021-04-27 3:02 [PATCH] xfs: count free space btree blocks when scrubbing pre-lazysbcount fses Darrick J. Wong
@ 2021-04-27 12:46 ` Brian Foster
2021-04-27 13:22 ` Gao Xiang
1 sibling, 0 replies; 3+ messages in thread
From: Brian Foster @ 2021-04-27 12:46 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: Gao Xiang, linux-xfs, Dave Chinner, Zorro Lang
On Mon, Apr 26, 2021 at 08:02:32PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> Since agf_btreeblks didn't exist before the lazysbcount feature, the fs
> summary count scrubber needs to walk the free space btrees to determine
> the amount of space being used by those btrees.
>
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
> ---
Reviewed-by: Brian Foster <bfoster@redhat.com>
> Note: I /think/ the four patches on the list right now fix all the
> obvious problems with !lazysbcount filesystems, except for xfs/49[12]
> which fuzz the summary counters.
> ---
> fs/xfs/scrub/fscounters.c | 37 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/fs/xfs/scrub/fscounters.c b/fs/xfs/scrub/fscounters.c
> index 318b81c0f90d..87476a00de9d 100644
> --- a/fs/xfs/scrub/fscounters.c
> +++ b/fs/xfs/scrub/fscounters.c
> @@ -13,6 +13,7 @@
> #include "xfs_alloc.h"
> #include "xfs_ialloc.h"
> #include "xfs_health.h"
> +#include "xfs_btree.h"
> #include "scrub/scrub.h"
> #include "scrub/common.h"
> #include "scrub/trace.h"
> @@ -143,6 +144,35 @@ xchk_setup_fscounters(
> return xchk_trans_alloc(sc, 0);
> }
>
> +/* Count free space btree blocks manually for pre-lazysbcount filesystems. */
> +static int
> +xchk_fscount_btreeblks(
> + struct xfs_scrub *sc,
> + struct xchk_fscounters *fsc,
> + xfs_agnumber_t agno)
> +{
> + xfs_extlen_t blocks;
> + int error;
> +
> + error = xchk_ag_init(sc, agno, &sc->sa);
> + if (error)
> + return error;
> +
> + error = xfs_btree_count_blocks(sc->sa.bno_cur, &blocks);
> + if (error)
> + goto out_free;
> + fsc->fdblocks += blocks - 1;
> +
> + error = xfs_btree_count_blocks(sc->sa.cnt_cur, &blocks);
> + if (error)
> + goto out_free;
> + fsc->fdblocks += blocks - 1;
> +
> +out_free:
> + xchk_ag_free(sc, &sc->sa);
> + return error;
> +}
> +
> /*
> * Calculate what the global in-core counters ought to be from the incore
> * per-AG structure. Callers can compare this to the actual in-core counters
> @@ -184,6 +214,13 @@ xchk_fscount_aggregate_agcounts(
> fsc->fdblocks += pag->pagf_flcount;
> if (xfs_sb_version_haslazysbcount(&sc->mp->m_sb))
> fsc->fdblocks += pag->pagf_btreeblks;
> + else {
> + error = xchk_fscount_btreeblks(sc, fsc, agno);
> + if (error) {
> + xfs_perag_put(pag);
> + break;
> + }
> + }
>
> /*
> * Per-AG reservations are taken out of the incore counters,
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] xfs: count free space btree blocks when scrubbing pre-lazysbcount fses
2021-04-27 3:02 [PATCH] xfs: count free space btree blocks when scrubbing pre-lazysbcount fses Darrick J. Wong
2021-04-27 12:46 ` Brian Foster
@ 2021-04-27 13:22 ` Gao Xiang
1 sibling, 0 replies; 3+ messages in thread
From: Gao Xiang @ 2021-04-27 13:22 UTC (permalink / raw)
To: Darrick J. Wong; +Cc: linux-xfs, Dave Chinner, Zorro Lang
On Mon, Apr 26, 2021 at 08:02:32PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> Since agf_btreeblks didn't exist before the lazysbcount feature, the fs
> summary count scrubber needs to walk the free space btrees to determine
> the amount of space being used by those btrees.
>
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Don't look into scrubbing code too much, but the code
here looks fine to me:
Reviewed-by: Gao Xiang <hsiangkao@redhat.com>
Thanks,
Gao Xiang
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-04-27 13:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-04-27 3:02 [PATCH] xfs: count free space btree blocks when scrubbing pre-lazysbcount fses Darrick J. Wong
2021-04-27 12:46 ` Brian Foster
2021-04-27 13:22 ` Gao Xiang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox