diff options
-rw-r--r-- | fs/direct-io.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c index 9644d0205dad..cfb816dc6d9f 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c | |||
@@ -672,12 +672,6 @@ static inline int dio_send_cur_page(struct dio *dio, struct dio_submit *sdio, | |||
672 | if (sdio->final_block_in_bio != sdio->cur_page_block || | 672 | if (sdio->final_block_in_bio != sdio->cur_page_block || |
673 | cur_offset != bio_next_offset) | 673 | cur_offset != bio_next_offset) |
674 | dio_bio_submit(dio, sdio); | 674 | dio_bio_submit(dio, sdio); |
675 | /* | ||
676 | * Submit now if the underlying fs is about to perform a | ||
677 | * metadata read | ||
678 | */ | ||
679 | else if (sdio->boundary) | ||
680 | dio_bio_submit(dio, sdio); | ||
681 | } | 675 | } |
682 | 676 | ||
683 | if (sdio->bio == NULL) { | 677 | if (sdio->bio == NULL) { |
@@ -737,16 +731,6 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, | |||
737 | sdio->cur_page_block + | 731 | sdio->cur_page_block + |
738 | (sdio->cur_page_len >> sdio->blkbits) == blocknr) { | 732 | (sdio->cur_page_len >> sdio->blkbits) == blocknr) { |
739 | sdio->cur_page_len += len; | 733 | sdio->cur_page_len += len; |
740 | |||
741 | /* | ||
742 | * If sdio->boundary then we want to schedule the IO now to | ||
743 | * avoid metadata seeks. | ||
744 | */ | ||
745 | if (sdio->boundary) { | ||
746 | ret = dio_send_cur_page(dio, sdio, map_bh); | ||
747 | page_cache_release(sdio->cur_page); | ||
748 | sdio->cur_page = NULL; | ||
749 | } | ||
750 | goto out; | 734 | goto out; |
751 | } | 735 | } |
752 | 736 | ||
@@ -758,7 +742,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, | |||
758 | page_cache_release(sdio->cur_page); | 742 | page_cache_release(sdio->cur_page); |
759 | sdio->cur_page = NULL; | 743 | sdio->cur_page = NULL; |
760 | if (ret) | 744 | if (ret) |
761 | goto out; | 745 | return ret; |
762 | } | 746 | } |
763 | 747 | ||
764 | page_cache_get(page); /* It is in dio */ | 748 | page_cache_get(page); /* It is in dio */ |
@@ -768,6 +752,16 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, | |||
768 | sdio->cur_page_block = blocknr; | 752 | sdio->cur_page_block = blocknr; |
769 | sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits; | 753 | sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits; |
770 | out: | 754 | out: |
755 | /* | ||
756 | * If sdio->boundary then we want to schedule the IO now to | ||
757 | * avoid metadata seeks. | ||
758 | */ | ||
759 | if (sdio->boundary) { | ||
760 | ret = dio_send_cur_page(dio, sdio, map_bh); | ||
761 | dio_bio_submit(dio, sdio); | ||
762 | page_cache_release(sdio->cur_page); | ||
763 | sdio->cur_page = NULL; | ||
764 | } | ||
771 | return ret; | 765 | return ret; |
772 | } | 766 | } |
773 | 767 | ||