summaryrefslogtreecommitdiff
path: root/crypto/api.c
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2014-09-06 22:34:39 +0100
committerChris Mason <clm@fb.com>2014-09-08 13:56:43 -0700
commit49dae1bc1c665817e434d01eefaa11967f618243 (patch)
tree4c306620e23a5c0446ce1826919ed5e62f8f0a5c /crypto/api.c
parentc47ca32d3aadb234f73389a34c97574085bc9eda (diff)
Btrfs: fix fsync data loss after a ranged fsync
While we're doing a full fsync (when the inode has the flag BTRFS_INODE_NEEDS_FULL_SYNC set) that is ranged too (covers only a portion of the file), we might have ordered operations that are started before or while we're logging the inode and that fall outside the fsync range. Therefore when a full ranged fsync finishes don't remove every extent map from the list of modified extent maps - as for some of them, that fall outside our fsync range, their respective ordered operation hasn't finished yet, meaning the corresponding file extent item wasn't inserted into the fs/subvol tree yet and therefore we didn't log it, and we must let the next fast fsync (one that checks only the modified list) see this extent map and log a matching file extent item to the log btree and wait for its ordered operation to finish (if it's still ongoing). A test case for xfstests follows. Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'crypto/api.c')
0 files changed, 0 insertions, 0 deletions