vfs: make word-at-a-time accesses handle a non-existing page
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 3 May 2012 17:16:43 +0000 (10:16 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 3 May 2012 21:01:40 +0000 (14:01 -0700)
commite419b4cc585680940bc42f8ca8a071d6023fb1bb
tree8fce0f12b7b2a0fdca7a937af137910011efa783
parentac001e76546523ec2ef05b2f7001d8fdc588d069
vfs: make word-at-a-time accesses handle a non-existing page

It turns out that there are more cases than CONFIG_DEBUG_PAGEALLOC that
can have holes in the kernel address space: it seems to happen easily
with Xen, and it looks like the AMD gart64 code will also punch holes
dynamically.

Actually hitting that case is still very unlikely, so just do the
access, and take an exception and fix it up for the very unlikely case
of it being a page-crosser with no next page.

And hey, this abstraction might even help other architectures that have
other issues with unaligned word accesses than the possible missing next
page.  IOW, this could do the byte order magic too.

Peter Anvin fixed a thinko in the shifting for the exception case.

Reported-and-tested-by: Jana Saout <jana@saout.de>
Cc: Peter Anvin <hpa@zytor.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/Kconfig
arch/x86/include/asm/word-at-a-time.h
fs/dcache.c
fs/namei.c