summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2015-07-29 11:48:02 +1000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-08-10 12:21:59 -0700
commitd00799670008b9d6745e2b4adb1f7e09b3e71069 (patch)
tree48843da7cdadf1711fce8c57309023de1c44618d /tools
parentff7f8c6411b43080cd8dc5907e2ef9613934daab (diff)
downloadlwn-d00799670008b9d6745e2b4adb1f7e09b3e71069.tar.gz
lwn-d00799670008b9d6745e2b4adb1f7e09b3e71069.zip
xfs: remote attributes need to be considered data
commit df150ed102baa0e78c06e08e975dfb47147dd677 upstream. We don't log remote attribute contents, and instead write them synchronously before we commit the block allocation and attribute tree update transaction. As a result we are writing to the allocated space before the allcoation has been made permanent. As a result, we cannot consider this allocation to be a metadata allocation. Metadata allocation can take blocks from the free list and so reuse them before the transaction that freed the block is committed to disk. This behaviour is perfectly fine for journalled metadata changes as log recovery will ensure the free operation is replayed before the overwrite, but for remote attribute writes this is not the case. Hence we have to consider the remote attribute blocks to contain data and allocate accordingly. We do this by dropping the XFS_BMAPI_METADATA flag from the block allocation. This means the allocation will not use blocks that are on the busy list without first ensuring that the freeing transaction has been committed to disk and the blocks removed from the busy list. This ensures we will never overwrite a freed block without first ensuring that it is really free. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions