aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/ordered-data.c17
1 files changed, 2 insertions, 15 deletions
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index bbf6d0d9aeb..9807750c625 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -621,19 +621,11 @@ void btrfs_wait_ordered_range(struct inode *inode, u64 start, u64 len)
621 if (orig_end > INT_LIMIT(loff_t)) 621 if (orig_end > INT_LIMIT(loff_t))
622 orig_end = INT_LIMIT(loff_t); 622 orig_end = INT_LIMIT(loff_t);
623 } 623 }
624again: 624
625 /* start IO across the range first to instantiate any delalloc 625 /* start IO across the range first to instantiate any delalloc
626 * extents 626 * extents
627 */ 627 */
628 filemap_fdatawrite_range(inode->i_mapping, start, orig_end); 628 filemap_write_and_wait_range(inode->i_mapping, start, orig_end);
629
630 /* The compression code will leave pages locked but return from
631 * writepage without setting the page writeback. Starting again
632 * with WB_SYNC_ALL will end up waiting for the IO to actually start.
633 */
634 filemap_fdatawrite_range(inode->i_mapping, start, orig_end);
635
636 filemap_fdatawait_range(inode->i_mapping, start, orig_end);
637 629
638 end = orig_end; 630 end = orig_end;
639 found = 0; 631 found = 0;
@@ -657,11 +649,6 @@ again:
657 break; 649 break;
658 end--; 650 end--;
659 } 651 }
660 if (found || test_range_bit(&BTRFS_I(inode)->io_tree, start, orig_end,
661 EXTENT_DELALLOC, 0, NULL)) {
662 schedule_timeout(1);
663 goto again;
664 }
665} 652}
666 653
667/* 654/*