xfs: disable swap extents ioctl on CRC enabled filesystems
authorDave Chinner <dchinner@redhat.com>
Mon, 27 May 2013 06:38:24 +0000 (16:38 +1000)
committerBen Myers <bpm@sgi.com>
Thu, 30 May 2013 22:20:08 +0000 (17:20 -0500)
commit7c9950fd2ac97431230544142d5e652e1b948372
treed7862206d6bc85506490ffa80d3e6ac5836a6e09
parente7927e879d12d27aa06b9bbed57cc32dcd7d17fd
xfs: disable swap extents ioctl on CRC enabled filesystems

Currently, swapping extents from one inode to another is a simple
act of switching data and attribute forks from one inode to another.
This, unfortunately in no longer so simple with CRC enabled
filesystems as there is owner information embedded into the BMBT
blocks that are swapped between inodes. Hence swapping the forks
between inodes results in the inodes having mapping blocks that
point to the wrong owner and hence are considered corrupt.

To fix this we need an extent tree block or record based swap
algorithm so that the BMBT block owner information can be updated
atomically in the swap transaction. This is a significant piece of
new work, so for the moment simply don't allow swap extent
operations to succeed on CRC enabled filesystems.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Ben Myers <bpm@sgi.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
(cherry picked from commit 02f75405a75eadfb072609f6bf839e027de6a29a)
fs/xfs/xfs_dfrag.c