diff options
-rw-r--r-- | fs/btrfs/ordered-data.c | 17 |
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 | } |
624 | again: | 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 | /* |