|
@@ -1398,20 +1398,23 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page,
|
|
|
int ret;
|
|
|
struct btrfs_root *root = BTRFS_I(inode)->root;
|
|
|
|
|
|
- if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW)
|
|
|
+ if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) {
|
|
|
ret = run_delalloc_nocow(inode, locked_page, start, end,
|
|
|
page_started, 1, nr_written);
|
|
|
- else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC)
|
|
|
+ } else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC) {
|
|
|
ret = run_delalloc_nocow(inode, locked_page, start, end,
|
|
|
page_started, 0, nr_written);
|
|
|
- else if (!btrfs_test_opt(root, COMPRESS) &&
|
|
|
- !(BTRFS_I(inode)->force_compress) &&
|
|
|
- !(BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))
|
|
|
+ } else if (!btrfs_test_opt(root, COMPRESS) &&
|
|
|
+ !(BTRFS_I(inode)->force_compress) &&
|
|
|
+ !(BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS)) {
|
|
|
ret = cow_file_range(inode, locked_page, start, end,
|
|
|
page_started, nr_written, 1);
|
|
|
- else
|
|
|
+ } else {
|
|
|
+ set_bit(BTRFS_INODE_HAS_ASYNC_EXTENT,
|
|
|
+ &BTRFS_I(inode)->runtime_flags);
|
|
|
ret = cow_file_range_async(inode, locked_page, start, end,
|
|
|
page_started, nr_written);
|
|
|
+ }
|
|
|
return ret;
|
|
|
}
|
|
|
|