xfs: scrub should set preen if attr leaf has holes
If an attr block indicates that it could use compaction, set the preen flag to have the attr fork rebuilt, since the attr fork rebuilder can take care of that for us. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
e47dcf113a
commit
0ee230dec2
@ -428,6 +428,8 @@ xchk_xattr_block(
|
||||
xchk_da_set_corrupt(ds, level);
|
||||
if (!xchk_xattr_set_map(ds->sc, ab->usedmap, 0, hdrsize))
|
||||
xchk_da_set_corrupt(ds, level);
|
||||
if (leafhdr.holes)
|
||||
xchk_da_set_preen(ds, level);
|
||||
|
||||
if (ds->sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
|
||||
goto out;
|
||||
|
@ -78,6 +78,22 @@ xchk_da_set_corrupt(
|
||||
__return_address);
|
||||
}
|
||||
|
||||
/* Flag a da btree node in need of optimization. */
|
||||
void
|
||||
xchk_da_set_preen(
|
||||
struct xchk_da_btree *ds,
|
||||
int level)
|
||||
{
|
||||
struct xfs_scrub *sc = ds->sc;
|
||||
|
||||
sc->sm->sm_flags |= XFS_SCRUB_OFLAG_PREEN;
|
||||
trace_xchk_fblock_preen(sc, ds->dargs.whichfork,
|
||||
xfs_dir2_da_to_db(ds->dargs.geo,
|
||||
ds->state->path.blk[level].blkno),
|
||||
__return_address);
|
||||
}
|
||||
|
||||
/* Find an entry at a certain level in a da btree. */
|
||||
static struct xfs_da_node_entry *
|
||||
xchk_da_btree_node_entry(
|
||||
struct xchk_da_btree *ds,
|
||||
|
@ -35,6 +35,7 @@ bool xchk_da_process_error(struct xchk_da_btree *ds, int level, int *error);
|
||||
|
||||
/* Check for da btree corruption. */
|
||||
void xchk_da_set_corrupt(struct xchk_da_btree *ds, int level);
|
||||
void xchk_da_set_preen(struct xchk_da_btree *ds, int level);
|
||||
|
||||
int xchk_da_btree_hash(struct xchk_da_btree *ds, int level, __be32 *hashp);
|
||||
int xchk_da_btree(struct xfs_scrub *sc, int whichfork,
|
||||
|
@ -365,6 +365,7 @@ DEFINE_EVENT(xchk_fblock_error_class, name, \
|
||||
|
||||
DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_error);
|
||||
DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_warning);
|
||||
DEFINE_SCRUB_FBLOCK_ERROR_EVENT(xchk_fblock_preen);
|
||||
|
||||
#ifdef CONFIG_XFS_QUOTA
|
||||
DECLARE_EVENT_CLASS(xchk_dqiter_class,
|
||||
|
Loading…
Reference in New Issue
Block a user