fs: convert core functions to zero_user_page

It's very common for file systems to need to zero part or all of a page,
the simplist way is just to use kmap_atomic() and memset().  There's
actually a library function in include/linux/highmem.h that does exactly
that, but it's confusingly named memclear_highpage_flush(), which is
descriptive of *how* it does the work rather than what the *purpose* is.
So this patchset renames the function to zero_user_page(), and calls it
from the various places that currently open code it.

This first patch introduces the new function call, and converts all the
core kernel callsites, both the open-coded ones and the old
memclear_highpage_flush() ones.  Following this patch is a series of
conversions for each file system individually, per AKPM, and finally a
patch deprecating the old call.  The diffstat below shows the entire
patchset.

[akpm@linux-foundation.org: fix a few things]
Signed-off-by: Nate Diller <nate.diller@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Nate Diller 2007-05-09 02:35:07 -07:00 committed by Linus Torvalds
parent 38a23e311b
commit 01f2705daf
7 changed files with 42 additions and 81 deletions

View file

@ -94,17 +94,27 @@ static inline void clear_highpage(struct page *page)
/*
* Same but also flushes aliased cache contents to RAM.
*
* This must be a macro because KM_USER0 and friends aren't defined if
* !CONFIG_HIGHMEM
*/
static inline void memclear_highpage_flush(struct page *page, unsigned int offset, unsigned int size)
#define zero_user_page(page, offset, size, km_type) \
do { \
void *kaddr; \
\
BUG_ON((offset) + (size) > PAGE_SIZE); \
\
kaddr = kmap_atomic(page, km_type); \
memset((char *)kaddr + (offset), 0, (size)); \
flush_dcache_page(page); \
kunmap_atomic(kaddr, (km_type)); \
} while (0)
static inline void memclear_highpage_flush(struct page *page,
unsigned int offset, unsigned int size)
{
void *kaddr;
BUG_ON(offset + size > PAGE_SIZE);
kaddr = kmap_atomic(page, KM_USER0);
memset((char *)kaddr + offset, 0, size);
flush_dcache_page(page);
kunmap_atomic(kaddr, KM_USER0);
zero_user_page(page, offset, size, KM_USER0);
}
#ifndef __HAVE_ARCH_COPY_USER_HIGHPAGE