mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
649d9d98c6
Break up xchk_da_btree_entry and handle looking up leaf node entries in the attr / dir callbacks, so that only the generic node handling is left in the common core code. Note that the checks for the crc enabled blocks are removed, as the scrubbing code already remaps the magic numbers earlier. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
44 lines
1.2 KiB
C
44 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (C) 2017 Oracle. All Rights Reserved.
|
|
* Author: Darrick J. Wong <darrick.wong@oracle.com>
|
|
*/
|
|
#ifndef __XFS_SCRUB_DABTREE_H__
|
|
#define __XFS_SCRUB_DABTREE_H__
|
|
|
|
/* dir/attr btree */
|
|
|
|
struct xchk_da_btree {
|
|
struct xfs_da_args dargs;
|
|
xfs_dahash_t hashes[XFS_DA_NODE_MAXDEPTH];
|
|
int maxrecs[XFS_DA_NODE_MAXDEPTH];
|
|
struct xfs_da_state *state;
|
|
struct xfs_scrub *sc;
|
|
void *private;
|
|
|
|
/*
|
|
* Lowest and highest directory block address in which we expect
|
|
* to find dir/attr btree node blocks. For a directory this
|
|
* (presumably) means between LEAF_OFFSET and FREE_OFFSET; for
|
|
* attributes there is no limit.
|
|
*/
|
|
xfs_dablk_t lowest;
|
|
xfs_dablk_t highest;
|
|
|
|
int tree_level;
|
|
};
|
|
|
|
typedef int (*xchk_da_btree_rec_fn)(struct xchk_da_btree *ds, int level);
|
|
|
|
/* Check for da btree operation errors. */
|
|
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);
|
|
|
|
int xchk_da_btree_hash(struct xchk_da_btree *ds, int level, __be32 *hashp);
|
|
int xchk_da_btree(struct xfs_scrub *sc, int whichfork,
|
|
xchk_da_btree_rec_fn scrub_fn, void *private);
|
|
|
|
#endif /* __XFS_SCRUB_DABTREE_H__ */
|