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 17:55:31 +0000 (12:55 -0500)
commit02f75405a75eadfb072609f6bf839e027de6a29a
tree2ddc9e048874eac38fe92be2a069c30659d1b633
parent709da6a61aaf12181a8eea8443919ae5fc1b731d
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>
fs/xfs/xfs_dfrag.c