diff options
author | Dave Chinner <dchinner@redhat.com> | 2013-06-12 12:19:08 +1000 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2013-06-13 14:18:02 -0500 |
commit | ade1335afef556df6538eb02e8c0dc91fbd9cc37 (patch) | |
tree | 392dd4d2d830dd26f7b0d7ef2fe0fe2e921c557a /fs/xfs/xfs_sysctl.c | |
parent | 8a1fd2950e1fe267e11fc8c85dcaa6b023b51b60 (diff) | |
download | blackbird-op-linux-ade1335afef556df6538eb02e8c0dc91fbd9cc37.tar.gz blackbird-op-linux-ade1335afef556df6538eb02e8c0dc91fbd9cc37.zip |
xfs: ensure btree root split sets blkno correctly
For CRC enabled filesystems, the BMBT is rooted in an inode, so it
passes through a different code path on root splits than the
freespace and inode btrees. This is much less traversed by xfstests
than the other trees. When testing on a 1k block size filesystem,
I've been seeing ASSERT failures in generic/234 like:
XFS: Assertion failed: cur->bc_btnum != XFS_BTNUM_BMAP || cur->bc_private.b.allocated == 0, file: fs/xfs/xfs_btree.c, line: 317
which are generally preceded by a lblock check failure. I noticed
this in the bmbt stats:
$ pminfo -f xfs.btree.block_map
xfs.btree.block_map.lookup
value 39135
xfs.btree.block_map.compare
value 268432
xfs.btree.block_map.insrec
value 15786
xfs.btree.block_map.delrec
value 13884
xfs.btree.block_map.newroot
value 2
xfs.btree.block_map.killroot
value 0
.....
Very little coverage of root splits and merges. Indeed, on a 4k
filesystem, block_map.newroot and block_map.killroot are both zero.
i.e. the code is not exercised at all, and it's the only generic
btree infrastructure operation that is not exercised by a default run
of xfstests.
Turns out that on a 1k filesystem, generic/234 accounts for one of
those two root splits, and that is somewhat of a smoking gun. In
fact, it's the same problem we saw in the directory/attr code where
headers are memcpy()d from one block to another without updating the
self describing metadata.
Simple fix - when copying the header out of the root block, make
sure the block number is updated correctly.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_sysctl.c')
0 files changed, 0 insertions, 0 deletions