]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
another .39 patch
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 2 Aug 2011 16:20:05 +0000 (09:20 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 2 Aug 2011 16:20:05 +0000 (09:20 -0700)
review-2.6.39/fs-cache-fix-__fscache_uncache_all_inode_pages-s-outer.patch [new file with mode: 0644]
review-2.6.39/series

diff --git a/review-2.6.39/fs-cache-fix-__fscache_uncache_all_inode_pages-s-outer.patch b/review-2.6.39/fs-cache-fix-__fscache_uncache_all_inode_pages-s-outer.patch
new file mode 100644 (file)
index 0000000..2521b58
--- /dev/null
@@ -0,0 +1,70 @@
+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("");
+ }
index fc479c23d12c26d4821e609d24f7bb6f53ca1925..6bb4232b19bb2d0fc4cc8ae66d307615b14cb14c 100644 (file)
@@ -68,3 +68,4 @@ cifs-fix-wsize-negotiation-to-respect-max-buffer-size-and.patch
 cifs-lower-default-and-max-wsize-to-what-2.6.39-can-handle.patch
 bridge-send-proper-message_age-in-config-bpdu.patch
 gro-only-reset-frag0-when-skb-can-be-pulled.patch
+fs-cache-fix-__fscache_uncache_all_inode_pages-s-outer.patch