mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	xfs: don't track firstrec/firstkey separately in xchk_btree
The btree scrubbing code checks that the records (or keys) that it finds in a btree block are all in order by calling the btree cursor's ->recs_inorder function. This of course makes no sense for the first item in the block, so we switch that off with a separate variable in struct xchk_btree. Christoph helped me figure out that the variable is unnecessary, since we just accessed bc_ptrs[level] and can compare that against zero. Use that, and save ourselves some memory space. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
		
							parent
							
								
									efb79ea310
								
							
						
					
					
						commit
						d47fef9342
					
				| @ -141,9 +141,9 @@ xchk_btree_rec( | ||||
| 	trace_xchk_btree_rec(bs->sc, cur, 0); | ||||
| 
 | ||||
| 	/* If this isn't the first record, are they in order? */ | ||||
| 	if (!bs->firstrec && !cur->bc_ops->recs_inorder(cur, &bs->lastrec, rec)) | ||||
| 	if (cur->bc_ptrs[0] > 1 && | ||||
| 	    !cur->bc_ops->recs_inorder(cur, &bs->lastrec, rec)) | ||||
| 		xchk_btree_set_corrupt(bs->sc, cur, 0); | ||||
| 	bs->firstrec = false; | ||||
| 	memcpy(&bs->lastrec, rec, cur->bc_ops->rec_len); | ||||
| 
 | ||||
| 	if (cur->bc_nlevels == 1) | ||||
| @ -188,10 +188,9 @@ xchk_btree_key( | ||||
| 	trace_xchk_btree_key(bs->sc, cur, level); | ||||
| 
 | ||||
| 	/* If this isn't the first key, are they in order? */ | ||||
| 	if (!bs->firstkey[level] && | ||||
| 	if (cur->bc_ptrs[level] > 1 && | ||||
| 	    !cur->bc_ops->keys_inorder(cur, &bs->lastkey[level], key)) | ||||
| 		xchk_btree_set_corrupt(bs->sc, cur, level); | ||||
| 	bs->firstkey[level] = false; | ||||
| 	memcpy(&bs->lastkey[level], key, cur->bc_ops->key_len); | ||||
| 
 | ||||
| 	if (level + 1 >= cur->bc_nlevels) | ||||
| @ -636,7 +635,6 @@ xchk_btree( | ||||
| 	struct xfs_buf			*bp; | ||||
| 	struct check_owner		*co; | ||||
| 	struct check_owner		*n; | ||||
| 	int				i; | ||||
| 	int				error = 0; | ||||
| 
 | ||||
| 	/*
 | ||||
| @ -649,13 +647,10 @@ xchk_btree( | ||||
| 	bs->cur = cur; | ||||
| 	bs->scrub_rec = scrub_fn; | ||||
| 	bs->oinfo = oinfo; | ||||
| 	bs->firstrec = true; | ||||
| 	bs->private = private; | ||||
| 	bs->sc = sc; | ||||
| 
 | ||||
| 	/* Initialize scrub state */ | ||||
| 	for (i = 0; i < XFS_BTREE_MAXLEVELS; i++) | ||||
| 		bs->firstkey[i] = true; | ||||
| 	INIT_LIST_HEAD(&bs->to_check); | ||||
| 
 | ||||
| 	/* Don't try to check a tree with a height we can't handle. */ | ||||
|  | ||||
| @ -39,9 +39,7 @@ struct xchk_btree { | ||||
| 
 | ||||
| 	/* internal scrub state */ | ||||
| 	union xfs_btree_rec		lastrec; | ||||
| 	bool				firstrec; | ||||
| 	union xfs_btree_key		lastkey[XFS_BTREE_MAXLEVELS]; | ||||
| 	bool				firstkey[XFS_BTREE_MAXLEVELS]; | ||||
| 	struct list_head		to_check; | ||||
| }; | ||||
| int xchk_btree(struct xfs_scrub *sc, struct xfs_btree_cur *cur, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Darrick J. Wong
						Darrick J. Wong