|
@@ -1382,8 +1382,12 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if ((range->flags & BTRFS_DEFRAG_RANGE_START_IO))
|
|
|
+ if ((range->flags & BTRFS_DEFRAG_RANGE_START_IO)) {
|
|
|
filemap_flush(inode->i_mapping);
|
|
|
+ if (test_bit(BTRFS_INODE_HAS_ASYNC_EXTENT,
|
|
|
+ &BTRFS_I(inode)->runtime_flags))
|
|
|
+ filemap_flush(inode->i_mapping);
|
|
|
+ }
|
|
|
|
|
|
if ((range->flags & BTRFS_DEFRAG_RANGE_COMPRESS)) {
|
|
|
/* the filemap_flush will queue IO into the worker threads, but
|