struct mapping_area {
        local_lock_t lock;
        char *vm_buf; /* copy buffer for objects that span pages */
-       char *vm_addr; /* address of kmap_atomic()'ed pages */
+       char *vm_addr; /* address of kmap_local_page()'ed pages */
        enum zs_mapmode vm_mm; /* mapping mode */
 };
 
 static void *__zs_map_object(struct mapping_area *area,
                        struct page *pages[2], int off, int size)
 {
-       int sizes[2];
-       void *addr;
+       size_t sizes[2];
        char *buf = area->vm_buf;
 
-       /* disable page faults to match kmap_atomic() return conditions */
+       /* disable page faults to match kmap_local_page() return conditions */
        pagefault_disable();
 
        /* no read fastpath */
        sizes[1] = size - sizes[0];
 
        /* copy object to per-cpu buffer */
-       addr = kmap_local_page(pages[0]);
-       memcpy(buf, addr + off, sizes[0]);
-       kunmap_local(addr);
-       addr = kmap_local_page(pages[1]);
-       memcpy(buf + sizes[0], addr, sizes[1]);
-       kunmap_local(addr);
+       memcpy_from_page(buf, pages[0], off, sizes[0]);
+       memcpy_from_page(buf + sizes[0], pages[1], 0, sizes[1]);
 out:
        return area->vm_buf;
 }
 static void __zs_unmap_object(struct mapping_area *area,
                        struct page *pages[2], int off, int size)
 {
-       int sizes[2];
-       void *addr;
+       size_t sizes[2];
        char *buf;
 
        /* no write fastpath */
        sizes[1] = size - sizes[0];
 
        /* copy per-cpu buffer to object */
-       addr = kmap_local_page(pages[0]);
-       memcpy(addr + off, buf, sizes[0]);
-       kunmap_local(addr);
-       addr = kmap_local_page(pages[1]);
-       memcpy(addr, buf + sizes[0], sizes[1]);
-       kunmap_local(addr);
+       memcpy_to_page(pages[0], off, buf, sizes[0]);
+       memcpy_to_page(pages[1], 0, buf + sizes[0], sizes[1]);
 
 out:
-       /* enable page faults to match kunmap_atomic() return conditions */
+       /* enable page faults to match kunmap_local() return conditions */
        pagefault_enable();
 }
 
                d_size -= size;
 
                /*
-                * Calling kunmap_atomic(d_addr) is necessary. kunmap_atomic()
-                * calls must occurs in reverse order of calls to kmap_atomic().
-                * So, to call kunmap_atomic(s_addr) we should first call
-                * kunmap_atomic(d_addr). For more details see
+                * Calling kunmap_local(d_addr) is necessary. kunmap_local()
+                * calls must occurs in reverse order of calls to kmap_local_page().
+                * So, to call kunmap_local(s_addr) we should first call
+                * kunmap_local(d_addr). For more details see
                 * Documentation/mm/highmem.rst.
                 */
                if (s_off >= PAGE_SIZE) {