mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 22:51:37 +00:00
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:
parent
38a23e311b
commit
01f2705daf
7 changed files with 42 additions and 81 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue