@@ -3268,12 +3268,23 @@ 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);
+ unlock_extent(&BTRFS_I(inode)->io_tree, page_start,
+ page_end);
+ goto out;
+
+ }
set_page_dirty(page);
- unlock_extent(&BTRFS_I(inode)->io_tree,
- page_start, page_end);
+ unlock_extent(&BTRFS_I(inode)->io_tree, page_start, page_end);
unlock_page(page);
put_page(page);
Signed-off-by: Nikolay Borisov <nborisov@suse.com> --- Hello, THis is rfc since I'm not entirely sure the cleanup sequence currently is sufficient so ideas are welcome. I have the feeling we need to do something with the page: * SetPageError * ClearPageUptodate * Something else? fs/btrfs/relocation.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)