xfs: return the hash value of a leaf1 directory block
Modify the existing dir leafn lasthash function to enable us to calculate the highest hash value of a leaf1 block. This will be used by the directory scrubbing code to check the sanity of hashes in leaf1 directory blocks. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
e7f5d5ca36
commit
8e8877e6ed
|
@ -1282,7 +1282,7 @@ xfs_da3_fixhashpath(
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
case XFS_DIR2_LEAFN_MAGIC:
|
case XFS_DIR2_LEAFN_MAGIC:
|
||||||
lasthash = xfs_dir2_leafn_lasthash(dp, blk->bp, &count);
|
lasthash = xfs_dir2_leaf_lasthash(dp, blk->bp, &count);
|
||||||
if (count == 0)
|
if (count == 0)
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
|
@ -1502,7 +1502,7 @@ xfs_da3_node_lookup_int(
|
||||||
if (blk->magic == XFS_DIR2_LEAFN_MAGIC ||
|
if (blk->magic == XFS_DIR2_LEAFN_MAGIC ||
|
||||||
blk->magic == XFS_DIR3_LEAFN_MAGIC) {
|
blk->magic == XFS_DIR3_LEAFN_MAGIC) {
|
||||||
blk->magic = XFS_DIR2_LEAFN_MAGIC;
|
blk->magic = XFS_DIR2_LEAFN_MAGIC;
|
||||||
blk->hashval = xfs_dir2_leafn_lasthash(args->dp,
|
blk->hashval = xfs_dir2_leaf_lasthash(args->dp,
|
||||||
blk->bp, NULL);
|
blk->bp, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1929,7 +1929,7 @@ xfs_da3_path_shift(
|
||||||
blk->magic = XFS_DIR2_LEAFN_MAGIC;
|
blk->magic = XFS_DIR2_LEAFN_MAGIC;
|
||||||
ASSERT(level == path->active-1);
|
ASSERT(level == path->active-1);
|
||||||
blk->index = 0;
|
blk->index = 0;
|
||||||
blk->hashval = xfs_dir2_leafn_lasthash(args->dp,
|
blk->hashval = xfs_dir2_leaf_lasthash(args->dp,
|
||||||
blk->bp, NULL);
|
blk->bp, NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -528,7 +528,7 @@ xfs_dir2_free_hdr_check(
|
||||||
* Stale entries are ok.
|
* Stale entries are ok.
|
||||||
*/
|
*/
|
||||||
xfs_dahash_t /* hash value */
|
xfs_dahash_t /* hash value */
|
||||||
xfs_dir2_leafn_lasthash(
|
xfs_dir2_leaf_lasthash(
|
||||||
struct xfs_inode *dp,
|
struct xfs_inode *dp,
|
||||||
struct xfs_buf *bp, /* leaf buffer */
|
struct xfs_buf *bp, /* leaf buffer */
|
||||||
int *count) /* count of entries in leaf */
|
int *count) /* count of entries in leaf */
|
||||||
|
@ -540,7 +540,9 @@ xfs_dir2_leafn_lasthash(
|
||||||
dp->d_ops->leaf_hdr_from_disk(&leafhdr, leaf);
|
dp->d_ops->leaf_hdr_from_disk(&leafhdr, leaf);
|
||||||
|
|
||||||
ASSERT(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC ||
|
ASSERT(leafhdr.magic == XFS_DIR2_LEAFN_MAGIC ||
|
||||||
leafhdr.magic == XFS_DIR3_LEAFN_MAGIC);
|
leafhdr.magic == XFS_DIR3_LEAFN_MAGIC ||
|
||||||
|
leafhdr.magic == XFS_DIR2_LEAF1_MAGIC ||
|
||||||
|
leafhdr.magic == XFS_DIR3_LEAF1_MAGIC);
|
||||||
|
|
||||||
if (count)
|
if (count)
|
||||||
*count = leafhdr.count;
|
*count = leafhdr.count;
|
||||||
|
@ -1405,8 +1407,8 @@ xfs_dir2_leafn_split(
|
||||||
/*
|
/*
|
||||||
* Update last hashval in each block since we added the name.
|
* Update last hashval in each block since we added the name.
|
||||||
*/
|
*/
|
||||||
oldblk->hashval = xfs_dir2_leafn_lasthash(dp, oldblk->bp, NULL);
|
oldblk->hashval = xfs_dir2_leaf_lasthash(dp, oldblk->bp, NULL);
|
||||||
newblk->hashval = xfs_dir2_leafn_lasthash(dp, newblk->bp, NULL);
|
newblk->hashval = xfs_dir2_leaf_lasthash(dp, newblk->bp, NULL);
|
||||||
xfs_dir3_leaf_check(dp, oldblk->bp);
|
xfs_dir3_leaf_check(dp, oldblk->bp);
|
||||||
xfs_dir3_leaf_check(dp, newblk->bp);
|
xfs_dir3_leaf_check(dp, newblk->bp);
|
||||||
return error;
|
return error;
|
||||||
|
|
|
@ -95,7 +95,7 @@ extern bool xfs_dir3_leaf_check_int(struct xfs_mount *mp, struct xfs_inode *dp,
|
||||||
/* xfs_dir2_node.c */
|
/* xfs_dir2_node.c */
|
||||||
extern int xfs_dir2_leaf_to_node(struct xfs_da_args *args,
|
extern int xfs_dir2_leaf_to_node(struct xfs_da_args *args,
|
||||||
struct xfs_buf *lbp);
|
struct xfs_buf *lbp);
|
||||||
extern xfs_dahash_t xfs_dir2_leafn_lasthash(struct xfs_inode *dp,
|
extern xfs_dahash_t xfs_dir2_leaf_lasthash(struct xfs_inode *dp,
|
||||||
struct xfs_buf *bp, int *count);
|
struct xfs_buf *bp, int *count);
|
||||||
extern int xfs_dir2_leafn_lookup_int(struct xfs_buf *bp,
|
extern int xfs_dir2_leafn_lookup_int(struct xfs_buf *bp,
|
||||||
struct xfs_da_args *args, int *indexp,
|
struct xfs_da_args *args, int *indexp,
|
||||||
|
|
Loading…
Reference in New Issue