Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

FS-Cache: Fix __fscache_uncache_all_inode_pages()'s outer loop

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>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Jan Beulich and committed by
Linus Torvalds
b307d465 cf6ace16

+5 -9
+5 -9
fs/fscache/page.c
··· 976 976 977 977 pagevec_init(&pvec, 0); 978 978 next = 0; 979 - while (next <= (loff_t)-1 && 980 - pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE) 981 - ) { 979 + do { 980 + if (!pagevec_lookup(&pvec, mapping, next, PAGEVEC_SIZE)) 981 + break; 982 982 for (i = 0; i < pagevec_count(&pvec); i++) { 983 983 struct page *page = pvec.pages[i]; 984 - pgoff_t page_index = page->index; 985 - 986 - ASSERTCMP(page_index, >=, next); 987 - next = page_index + 1; 988 - 984 + next = page->index; 989 985 if (PageFsCache(page)) { 990 986 __fscache_wait_on_page_write(cookie, page); 991 987 __fscache_uncache_page(cookie, page); ··· 989 993 } 990 994 pagevec_release(&pvec); 991 995 cond_resched(); 992 - } 996 + } while (++next); 993 997 994 998 _leave(""); 995 999 }