X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=mm%2Ffilemap_xip.c;h=f874ae818ad3812f7cd051972c823c743a154d33;hb=feed9bab7b14b77be8d796bcee95e2343fb82955;hp=32132f3cd641a9bdea85c101aebfb51315ee0456;hpb=c4ec20717313daafba59225f812db89595952b83;p=powerpc.git diff --git a/mm/filemap_xip.c b/mm/filemap_xip.c index 32132f3cd6..f874ae818a 100644 --- a/mm/filemap_xip.c +++ b/mm/filemap_xip.c @@ -25,14 +25,15 @@ static struct page *__xip_sparse_page; static struct page *xip_sparse_page(void) { if (!__xip_sparse_page) { - unsigned long zeroes = get_zeroed_page(GFP_HIGHUSER); - if (zeroes) { + struct page *page = alloc_page(GFP_HIGHUSER | __GFP_ZERO); + + if (page) { static DEFINE_SPINLOCK(xip_alloc_lock); spin_lock(&xip_alloc_lock); if (!__xip_sparse_page) - __xip_sparse_page = virt_to_page(zeroes); + __xip_sparse_page = page; else - free_page(zeroes); + __free_page(page); spin_unlock(&xip_alloc_lock); } } @@ -314,7 +315,7 @@ __xip_file_write(struct file *filp, const char __user *buf, fault_in_pages_readable(buf, bytes); kaddr = kmap_atomic(page, KM_USER0); copied = bytes - - __copy_from_user_inatomic_nocache(kaddr, buf, bytes); + __copy_from_user_inatomic_nocache(kaddr + offset, buf, bytes); kunmap_atomic(kaddr, KM_USER0); flush_dcache_page(page);