|
|
@@ -3268,8 +3268,22 @@ static int relocate_file_extent_cluster(struct inode *inode,
|
|
|
nr++;
|
|
|
}
|
|
|
|
|
|
- btrfs_set_extent_delalloc(inode, page_start, page_end, 0, NULL,
|
|
|
- 0);
|
|
|
+ ret = btrfs_set_extent_delalloc(inode, page_start, page_end, 0,
|
|
|
+ NULL, 0);
|
|
|
+ if (ret) {
|
|
|
+ unlock_page(page);
|
|
|
+ put_page(page);
|
|
|
+ btrfs_delalloc_release_metadata(BTRFS_I(inode),
|
|
|
+ PAGE_SIZE);
|
|
|
+ btrfs_delalloc_release_extents(BTRFS_I(inode),
|
|
|
+ PAGE_SIZE);
|
|
|
+
|
|
|
+ clear_extent_bits(&BTRFS_I(inode)->io_tree,
|
|
|
+ page_start, page_end,
|
|
|
+ EXTENT_LOCKED | EXTENT_BOUNDARY);
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ }
|
|
|
set_page_dirty(page);
|
|
|
|
|
|
unlock_extent(&BTRFS_I(inode)->io_tree,
|