mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
xfs: flag empty xattr leaf blocks for optimization
Empty xattr leaf blocks at offset zero are a waste of space but otherwise harmless. If we encounter one, flag it as an opportunity for optimization. If we encounter empty attr leaf blocks anywhere else in the attr fork, that's corruption. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
0ee230dec2
commit
40190f9f91
@ -420,6 +420,17 @@ xchk_xattr_block(
|
||||
xfs_attr3_leaf_hdr_from_disk(mp->m_attr_geo, &leafhdr, leaf);
|
||||
hdrsize = xfs_attr3_leaf_hdr_size(leaf);
|
||||
|
||||
/*
|
||||
* Empty xattr leaf blocks mapped at block 0 are probably a byproduct
|
||||
* of a race between setxattr and a log shutdown. Anywhere else in the
|
||||
* attr fork is a corruption.
|
||||
*/
|
||||
if (leafhdr.count == 0) {
|
||||
if (blk->blkno == 0)
|
||||
xchk_da_set_preen(ds, level);
|
||||
else
|
||||
xchk_da_set_corrupt(ds, level);
|
||||
}
|
||||
if (leafhdr.usedbytes > mp->m_attr_geo->blksize)
|
||||
xchk_da_set_corrupt(ds, level);
|
||||
if (leafhdr.firstused > mp->m_attr_geo->blksize)
|
||||
|
@ -37,6 +37,8 @@ bool xchk_da_process_error(struct xchk_da_btree *ds, int level, int *error);
|
||||
void xchk_da_set_corrupt(struct xchk_da_btree *ds, int level);
|
||||
void xchk_da_set_preen(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,
|
||||
xchk_da_btree_rec_fn scrub_fn, void *private);
|
||||
|
Loading…
Reference in New Issue
Block a user