s_page = pfn_to_page(src_pfn);
        d_page = pfn_to_page(dst_pfn);
        if (PageHighMem(s_page)) {
-               src = kmap_atomic(s_page);
-               dst = kmap_atomic(d_page);
+               src = kmap_local_page(s_page);
+               dst = kmap_local_page(d_page);
                zeros_only = do_copy_page(dst, src);
-               kunmap_atomic(dst);
-               kunmap_atomic(src);
+               kunmap_local(dst);
+               kunmap_local(src);
        } else {
                if (PageHighMem(d_page)) {
                        /*
                         * data modified by kmap_atomic()
                         */
                        zeros_only = safe_copy_page(buffer, s_page);
-                       dst = kmap_atomic(d_page);
+                       dst = kmap_local_page(d_page);
                        copy_page(dst, buffer);
-                       kunmap_atomic(dst);
+                       kunmap_local(dst);
                } else {
                        zeros_only = safe_copy_page(page_address(d_page), s_page);
                }