1919#include "xfs_alloc.h"
2020#include "xfs_alloc_btree.h"
2121#include "xfs_ialloc_btree.h"
22+ #include "xfs_refcount_btree.h"
2223#include "scrub/scrub.h"
2324#include "scrub/common.h"
2425#include "scrub/btree.h"
@@ -58,6 +59,7 @@ struct xchk_rmap {
5859 struct xagb_bitmap log_owned ;
5960 struct xagb_bitmap ag_owned ;
6061 struct xagb_bitmap inobt_owned ;
62+ struct xagb_bitmap refcbt_owned ;
6163
6264 /* Did we complete the AG space metadata bitmaps? */
6365 bool bitmaps_complete ;
@@ -304,6 +306,9 @@ xchk_rmapbt_mark_bitmap(
304306 case XFS_RMAP_OWN_INOBT :
305307 bmp = & cr -> inobt_owned ;
306308 break ;
309+ case XFS_RMAP_OWN_REFC :
310+ bmp = & cr -> refcbt_owned ;
311+ break ;
307312 }
308313
309314 if (!bmp )
@@ -461,6 +466,19 @@ xchk_rmapbt_walk_ag_metadata(
461466 goto out ;
462467 }
463468
469+ /* OWN_REFC: refcountbt */
470+ if (xfs_has_reflink (sc -> mp )) {
471+ cur = sc -> sa .refc_cur ;
472+ if (!cur )
473+ cur = xfs_refcountbt_init_cursor (sc -> mp , sc -> tp ,
474+ sc -> sa .agf_bp , sc -> sa .pag );
475+ error = xagb_bitmap_set_btblocks (& cr -> refcbt_owned , cur );
476+ if (cur != sc -> sa .refc_cur )
477+ xfs_btree_del_cursor (cur , error );
478+ if (error )
479+ goto out ;
480+ }
481+
464482out :
465483 /*
466484 * If there's an error, set XFAIL and disable the bitmap
@@ -508,6 +526,9 @@ xchk_rmapbt_check_bitmaps(
508526
509527 if (xagb_bitmap_hweight (& cr -> inobt_owned ) != 0 )
510528 xchk_btree_xref_set_corrupt (sc , cur , level );
529+
530+ if (xagb_bitmap_hweight (& cr -> refcbt_owned ) != 0 )
531+ xchk_btree_xref_set_corrupt (sc , cur , level );
511532}
512533
513534/* Scrub the rmap btree for some AG. */
@@ -526,6 +547,7 @@ xchk_rmapbt(
526547 xagb_bitmap_init (& cr -> log_owned );
527548 xagb_bitmap_init (& cr -> ag_owned );
528549 xagb_bitmap_init (& cr -> inobt_owned );
550+ xagb_bitmap_init (& cr -> refcbt_owned );
529551
530552 error = xchk_rmapbt_walk_ag_metadata (sc , cr );
531553 if (error )
@@ -539,6 +561,7 @@ xchk_rmapbt(
539561 xchk_rmapbt_check_bitmaps (sc , cr );
540562
541563out :
564+ xagb_bitmap_destroy (& cr -> refcbt_owned );
542565 xagb_bitmap_destroy (& cr -> inobt_owned );
543566 xagb_bitmap_destroy (& cr -> ag_owned );
544567 xagb_bitmap_destroy (& cr -> log_owned );
0 commit comments