Remove open coded implementation of memclear_highpage flush There are a series of open coded reimplementation of memclear_highpage_flush all over the page cache code. Call memclear_highpage_flush in those locations. Consolidates code and eases maintenance. [There seems to be a better patch in mm. This patch here is just to make things work against 2.6.21 until the rest of the patch is diffed against mm] Signed-off-by: Christoph Lameter --- fs/buffer.c | 23 ++++++++--------------- fs/libfs.c | 10 +++++----- 2 files changed, 13 insertions(+), 20 deletions(-) Index: linux-2.6.21-rc7-mm1/fs/buffer.c =================================================================== --- linux-2.6.21-rc7-mm1.orig/fs/buffer.c 2007-04-25 00:17:31.000000000 -0700 +++ linux-2.6.21-rc7-mm1/fs/buffer.c 2007-04-25 00:18:17.000000000 -0700 @@ -1797,17 +1797,12 @@ static int __block_prepare_write(struct continue; } if (block_end > to || block_start < from) { - void *kaddr; - - kaddr = kmap_atomic(page, KM_USER0); if (block_end > to) - memset(kaddr+to, 0, - block_end-to); + memclear_highpage_flush(page, + to, block_end - to); if (block_start < from) - memset(kaddr+block_start, - 0, from-block_start); - flush_dcache_page(page); - kunmap_atomic(kaddr, KM_USER0); + memclear_highpage_flush(page, + block_start, from - block_start); } continue; } @@ -2224,7 +2219,6 @@ int nobh_prepare_write(struct page *page unsigned block_in_page; unsigned block_start; sector_t block_in_file; - char *kaddr; int nr_reads = 0; int i; int ret = 0; @@ -2264,13 +2258,12 @@ int nobh_prepare_write(struct page *page if (PageUptodate(page)) continue; if (buffer_new(&map_bh) || !buffer_mapped(&map_bh)) { - kaddr = kmap_atomic(page, KM_USER0); if (block_start < from) - memset(kaddr+block_start, 0, from-block_start); + memclear_highpage_flush(page, + block_start, from - block_start); if (block_end > to) - memset(kaddr + to, 0, block_end - to); - flush_dcache_page(page); - kunmap_atomic(kaddr, KM_USER0); + memclear_highpage_flush(page, + to, block_end - to); continue; } if (buffer_uptodate(&map_bh)) Index: linux-2.6.21-rc7-mm1/fs/libfs.c =================================================================== --- linux-2.6.21-rc7-mm1.orig/fs/libfs.c 2007-04-25 00:17:22.000000000 -0700 +++ linux-2.6.21-rc7-mm1/fs/libfs.c 2007-04-25 00:18:17.000000000 -0700 @@ -338,11 +338,11 @@ int simple_prepare_write(struct file *fi { if (!PageUptodate(page)) { if (to - from != PAGE_CACHE_SIZE) { - void *kaddr = kmap_atomic(page, KM_USER0); - memset(kaddr, 0, from); - memset(kaddr + to, 0, PAGE_CACHE_SIZE - to); - flush_dcache_page(page); - kunmap_atomic(kaddr, KM_USER0); + if (from) + memclear_highpage_flush(page, 0, from); + if (to < PAGE_CACHE_SIZE) + memclear_highpage_flush(page, to, + PAGE_CACHE_SIZE - to); } } return 0;