diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_dir2_leaf.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_dir2_leaf.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/xfs/libxfs/xfs_dir2_leaf.c b/fs/xfs/libxfs/xfs_dir2_leaf.c index d9b66306a9a7..cb9e950a911d 100644 --- a/fs/xfs/libxfs/xfs_dir2_leaf.c +++ b/fs/xfs/libxfs/xfs_dir2_leaf.c @@ -146,6 +146,8 @@ xfs_dir3_leaf_check_int(  	xfs_dir2_leaf_tail_t		*ltp;  	int				stale;  	int				i; +	bool				isleaf1 = (hdr->magic == XFS_DIR2_LEAF1_MAGIC || +						   hdr->magic == XFS_DIR3_LEAF1_MAGIC);  	ltp = xfs_dir2_leaf_tail_p(geo, leaf); @@ -158,8 +160,7 @@ xfs_dir3_leaf_check_int(  		return __this_address;  	/* Leaves and bests don't overlap in leaf format. */ -	if ((hdr->magic == XFS_DIR2_LEAF1_MAGIC || -	     hdr->magic == XFS_DIR3_LEAF1_MAGIC) && +	if (isleaf1 &&  	    (char *)&hdr->ents[hdr->count] > (char *)xfs_dir2_leaf_bests_p(ltp))  		return __this_address; @@ -175,6 +176,10 @@ xfs_dir3_leaf_check_int(  		}  		if (hdr->ents[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR))  			stale++; +		if (isleaf1 && xfs_dir2_dataptr_to_db(geo, +				be32_to_cpu(hdr->ents[i].address)) >= +				be32_to_cpu(ltp->bestcount)) +			return __this_address;  	}  	if (hdr->stale != stale)  		return __this_address;  | 
