zero_user_page: Use it in more places Replace open-coded kmap_atomic() and kunmap_atomic() surrounding two memory clear operations with zero_user_page(), as both memory operations act on the same page. Cc: Nate Diller Signed-off-by: Christoph Lameter --- fs/buffer.c | 29 ++++++++++------------------- fs/libfs.c | 10 +++++----- 2 files changed, 15 insertions(+), 24 deletions(-) Index: linux-2.6.21-rc7-mm2/fs/buffer.c =================================================================== --- linux-2.6.21-rc7-mm2.orig/fs/buffer.c 2007-04-27 22:51:27.000000000 -0700 +++ linux-2.6.21-rc7-mm2/fs/buffer.c 2007-04-29 23:58:48.000000000 -0700 @@ -1796,19 +1796,12 @@ static int __block_prepare_write(struct set_buffer_uptodate(bh); 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); - if (block_start < from) - memset(kaddr+block_start, - 0, from-block_start); - flush_dcache_page(page); - kunmap_atomic(kaddr, KM_USER0); - } + if (block_end > to) + zero_user_page(page, to, + block_end - to, KM_USER0); + if (block_start < from) + zero_user_page(page, block_start, + from - block_start, KM_USER0); continue; } } @@ -2224,7 +2217,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 +2256,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); + zero_user_page(page, block_start, + from - block_start, KM_USER0); if (block_end > to) - memset(kaddr + to, 0, block_end - to); - flush_dcache_page(page); - kunmap_atomic(kaddr, KM_USER0); + zero_user_page(page, to, + block_end - to, KM_USER0); continue; } if (buffer_uptodate(&map_bh)) Index: linux-2.6.21-rc7-mm2/fs/libfs.c =================================================================== --- linux-2.6.21-rc7-mm2.orig/fs/libfs.c 2007-04-27 22:51:27.000000000 -0700 +++ linux-2.6.21-rc7-mm2/fs/libfs.c 2007-04-27 22:55:12.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) + zero_user_page(page, 0, from, KM_USER0); + if (to < PAGE_CACHE_SIZE) + zero_user_page(page, to, + PAGE_CACHE_SIZE - to, KM_USER0); } } return 0;