xfs: check on-disk (not incore) btree root size in dfrag.c
authorEric Sandeen <sandeen@redhat.com>
Tue, 27 Mar 2012 20:40:26 +0000 (15:40 -0500)
committerBen Myers <bpm@sgi.com>
Thu, 20 Jun 2013 18:26:09 +0000 (13:26 -0500)
commit427d9fe233ccec3a293be4bcf07f9bac12463a99
treefa4fe5c810a10785d8a11f8f80c6e27c7e20d375
parent39a45d8463d98ea57347b871641136be64b216a9
xfs: check on-disk (not incore) btree root size in dfrag.c

xfs_swap_extents_check_format() contains checks to make sure that
original and the temporary files during defrag are compatible;
Gabriel VLASIU ran into a case where xfs_fsr returned EINVAL
because the tests found the btree root to be of size 120,
while the fork offset was only 104; IOW, they overlapped.

However, this is just due to an error in the
xfs_swap_extents_check_format() tests, because it is checking
the in-memory btree root size against the on-disk fork offset.
We should be checking the on-disk sizes in both cases.

This patch adds a new macro to calculate this size, and uses
it in the tests.

With this change, the filesystem image provided by Gabriel
allows for proper file degragmentation.

Reported-by: Gabriel VLASIU <gabriel@vlasiu.net>
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_bmap_btree.h
fs/xfs/xfs_dfrag.c