--- /dev/null
+From b307d4655a71749ac3f91c6dbe33d28cc026ceeb Mon Sep 17 00:00:00 2001
+From: Jan Beulich <JBeulich@novell.com>
+Date: Thu, 21 Jul 2011 15:02:43 +0100
+Subject: FS-Cache: Fix __fscache_uncache_all_inode_pages()'s outer loop
+
+From: Jan Beulich <JBeulich@novell.com>
+
+commit b307d4655a71749ac3f91c6dbe33d28cc026ceeb upstream.
+
+The compiler, at least for ix86 and m68k, validly warns that the
+comparison:
+
+ next <= (loff_t)-1
+
+is always true (and it's always true also for x86-64 and probably all
+other arches - as long as pgoff_t isn't wider than loff_t). The
+intention appears to be to avoid wrapping of "next", so rather than
+eliminating the pointless comparison, fix the loop to indeed get exited
+when "next" would otherwise wrap.
+
+On m68k the following warning is observed:
+
+ fs/fscache/page.c: In function '__fscache_uncache_all_inode_pages':
+ fs/fscache/page.c:979: warning: comparison is always false due to limited range of data type
+
+Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
+Reported-by: Jan Beulich <jbeulich@novell.com>
+Signed-off-by: Jan Beulich <jbeulich@novell.com>
+Signed-off-by: David Howells <dhowells@redhat.com>
+Cc: Suresh Jayaraman <sjayaraman@suse.de>
+Cc: Geert Uytterhoeven <geert@linux-m68k.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/fscache/page.c | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+--- a/fs/fscache/page.c
++++ b/fs/fscache/page.c
+@@ -989,16 +989,12 @@ void __fscache_uncache_all_inode_pages(s
+
+ pagevec_init(&pvec, 0);
+ next = 0;
+- while (next <= (loff_t)-1 &&
+- pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)
+- ) {
++ do {
++ if (!pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE))
++ break;
+ for (i = 0; i < pagevec_count(&pvec); i++) {
+ struct page *page = pvec.pages[i];
+- pgoff_t page_index = page->index;
+-
+- ASSERTCMP(page_index, >=, next);
+- next = page_index + 1;
+-
++ next = page->index;
+ if (PageFsCache(page)) {
+ __fscache_wait_on_page_write(cookie, page);
+ __fscache_uncache_page(cookie, page);
+@@ -1006,7 +1002,7 @@ void __fscache_uncache_all_inode_pages(s
+ }
+ pagevec_release(&pvec);
+ cond_resched();
+- }
++ } while (++next);
+
+ _leave("");
+ }