|
|
@@ -2637,6 +2637,16 @@ int memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order,
|
|
|
|
|
|
if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) &&
|
|
|
!page_counter_try_charge(&memcg->kmem, nr_pages, &counter)) {
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Enforce __GFP_NOFAIL allocation because callers are not
|
|
|
+ * prepared to see failures and likely do not have any failure
|
|
|
+ * handling code.
|
|
|
+ */
|
|
|
+ if (gfp & __GFP_NOFAIL) {
|
|
|
+ page_counter_charge(&memcg->kmem, nr_pages);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
cancel_charge(memcg, nr_pages);
|
|
|
return -ENOMEM;
|
|
|
}
|