

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/mm/truncate.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff -puN mm/truncate.c~invalidate-range-of-pages-after-direct-io-write-fix-fix mm/truncate.c
--- 25/mm/truncate.c~invalidate-range-of-pages-after-direct-io-write-fix-fix	Fri Feb  4 15:33:52 2005
+++ 25-akpm/mm/truncate.c	Fri Feb  4 15:34:47 2005
@@ -260,11 +260,12 @@ int invalidate_inode_pages2_range(struct
 	int i;
 	int ret = 0;
 	int did_range_unmap = 0;
+	int wrapped = 0;
 
 	pagevec_init(&pvec, 0);
 	next = start;
-	while (next <= end &&
-	       !ret && pagevec_lookup(&pvec, mapping, next,
+	while (next <= end && !ret && !wrapped &&
+		pagevec_lookup(&pvec, mapping, next,
 			min(end - next, (pgoff_t)PAGEVEC_SIZE - 1) + 1)) {
 		for (i = 0; !ret && i < pagevec_count(&pvec); i++) {
 			struct page *page = pvec.pages[i];
@@ -277,6 +278,8 @@ int invalidate_inode_pages2_range(struct
 			}
 			wait_on_page_writeback(page);
 			next = page->index + 1;
+			if (next == 0)
+				wrapped = 1;
 			while (page_mapped(page)) {
 				if (!did_range_unmap) {
 					/*
@@ -307,8 +310,6 @@ int invalidate_inode_pages2_range(struct
 		}
 		pagevec_release(&pvec);
 		cond_resched();
-		if (next == 0)
-			break;		/* The pgoff_t wrapped */
 	}
 	return ret;
 }
_
