aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 82c7c66f8523..2b48d2d51d50 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -2022,11 +2022,23 @@ out:
2022 if (trans) 2022 if (trans)
2023 btrfs_end_transaction(trans, root); 2023 btrfs_end_transaction(trans, root);
2024 2024
2025 if (ret) 2025 if (ret) {
2026 clear_extent_uptodate(io_tree, ordered_extent->file_offset, 2026 clear_extent_uptodate(io_tree, ordered_extent->file_offset,
2027 ordered_extent->file_offset + 2027 ordered_extent->file_offset +
2028 ordered_extent->len - 1, NULL, GFP_NOFS); 2028 ordered_extent->len - 1, NULL, GFP_NOFS);
2029 2029
2030 /*
2031 * If the ordered extent had an IOERR or something else went
2032 * wrong we need to return the space for this ordered extent
2033 * back to the allocator.
2034 */
2035 if (!test_bit(BTRFS_ORDERED_NOCOW, &ordered_extent->flags) &&
2036 !test_bit(BTRFS_ORDERED_PREALLOC, &ordered_extent->flags))
2037 btrfs_free_reserved_extent(root, ordered_extent->start,
2038 ordered_extent->disk_len);
2039 }
2040
2041
2030 /* 2042 /*
2031 * This needs to be done to make sure anybody waiting knows we are done 2043 * This needs to be done to make sure anybody waiting knows we are done
2032 * updating everything for this ordered extent. 2044 * updating everything for this ordered extent.