Merge tag 'powerpc-5.14-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[linux-2.6-microblaze.git] / mm / zswap.c
index 2076326..7944e3e 100644 (file)
@@ -967,6 +967,13 @@ static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
        spin_unlock(&tree->lock);
        BUG_ON(offset != entry->offset);
 
+       src = (u8 *)zhdr + sizeof(struct zswap_header);
+       if (!zpool_can_sleep_mapped(pool)) {
+               memcpy(tmp, src, entry->length);
+               src = tmp;
+               zpool_unmap_handle(pool, handle);
+       }
+
        /* try to allocate swap cache page */
        switch (zswap_get_swap_cache_page(swpentry, &page)) {
        case ZSWAP_SWAPCACHE_FAIL: /* no memory or invalidate happened */
@@ -982,17 +989,7 @@ static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
        case ZSWAP_SWAPCACHE_NEW: /* page is locked */
                /* decompress */
                acomp_ctx = raw_cpu_ptr(entry->pool->acomp_ctx);
-
                dlen = PAGE_SIZE;
-               src = (u8 *)zhdr + sizeof(struct zswap_header);
-
-               if (!zpool_can_sleep_mapped(pool)) {
-
-                       memcpy(tmp, src, entry->length);
-                       src = tmp;
-
-                       zpool_unmap_handle(pool, handle);
-               }
 
                mutex_lock(acomp_ctx->mutex);
                sg_init_one(&input, src, entry->length);
@@ -1203,7 +1200,7 @@ static int zswap_frontswap_store(unsigned type, pgoff_t offset,
                zswap_reject_alloc_fail++;
                goto put_dstmem;
        }
-       buf = zpool_map_handle(entry->pool->zpool, handle, ZPOOL_MM_RW);
+       buf = zpool_map_handle(entry->pool->zpool, handle, ZPOOL_MM_WO);
        memcpy(buf, &zhdr, hlen);
        memcpy(buf + hlen, dst, dlen);
        zpool_unmap_handle(entry->pool->zpool, handle);
@@ -1427,18 +1424,11 @@ static int __init zswap_debugfs_init(void)
 
        return 0;
 }
-
-static void __exit zswap_debugfs_exit(void)
-{
-       debugfs_remove_recursive(zswap_debugfs_root);
-}
 #else
 static int __init zswap_debugfs_init(void)
 {
        return 0;
 }
-
-static void __exit zswap_debugfs_exit(void) { }
 #endif
 
 /*********************************