|
@@ -317,7 +317,7 @@ swp_entry_t get_swap_page(struct page *page)
|
|
if (PageTransHuge(page)) {
|
|
if (PageTransHuge(page)) {
|
|
if (IS_ENABLED(CONFIG_THP_SWAP))
|
|
if (IS_ENABLED(CONFIG_THP_SWAP))
|
|
get_swap_pages(1, true, &entry);
|
|
get_swap_pages(1, true, &entry);
|
|
- return entry;
|
|
|
|
|
|
+ goto out;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -347,10 +347,14 @@ repeat:
|
|
}
|
|
}
|
|
mutex_unlock(&cache->alloc_lock);
|
|
mutex_unlock(&cache->alloc_lock);
|
|
if (entry.val)
|
|
if (entry.val)
|
|
- return entry;
|
|
|
|
|
|
+ goto out;
|
|
}
|
|
}
|
|
|
|
|
|
get_swap_pages(1, false, &entry);
|
|
get_swap_pages(1, false, &entry);
|
|
-
|
|
|
|
|
|
+out:
|
|
|
|
+ if (mem_cgroup_try_charge_swap(page, entry)) {
|
|
|
|
+ put_swap_page(page, entry);
|
|
|
|
+ entry.val = 0;
|
|
|
|
+ }
|
|
return entry;
|
|
return entry;
|
|
}
|
|
}
|