|
@@ -162,11 +162,11 @@ int add_to_swap(struct page *page)
|
|
|
return 1;
|
|
|
case -EEXIST:
|
|
|
/* Raced with "speculative" read_swap_cache_async */
|
|
|
- swap_free(entry);
|
|
|
+ swapcache_free(entry, NULL);
|
|
|
continue;
|
|
|
default:
|
|
|
/* -ENOMEM radix-tree allocation failure */
|
|
|
- swap_free(entry);
|
|
|
+ swapcache_free(entry, NULL);
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
@@ -188,8 +188,7 @@ void delete_from_swap_cache(struct page *page)
|
|
|
__delete_from_swap_cache(page);
|
|
|
spin_unlock_irq(&swapper_space.tree_lock);
|
|
|
|
|
|
- mem_cgroup_uncharge_swapcache(page, entry);
|
|
|
- swap_free(entry);
|
|
|
+ swapcache_free(entry, page);
|
|
|
page_cache_release(page);
|
|
|
}
|
|
|
|
|
@@ -293,7 +292,7 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
|
|
|
/*
|
|
|
* Swap entry may have been freed since our caller observed it.
|
|
|
*/
|
|
|
- if (!swap_duplicate(entry))
|
|
|
+ if (!swapcache_prepare(entry))
|
|
|
break;
|
|
|
|
|
|
/*
|
|
@@ -317,7 +316,7 @@ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask,
|
|
|
}
|
|
|
ClearPageSwapBacked(new_page);
|
|
|
__clear_page_locked(new_page);
|
|
|
- swap_free(entry);
|
|
|
+ swapcache_free(entry, NULL);
|
|
|
} while (err != -ENOMEM);
|
|
|
|
|
|
if (new_page)
|