|
@@ -752,11 +752,8 @@ static inline bool memcg_kmem_is_active(struct mem_cgroup *memcg)
|
|
|
* conditions, but because they are pretty simple, they are expected to be
|
|
|
* fast.
|
|
|
*/
|
|
|
-bool __memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg,
|
|
|
- int order);
|
|
|
-void __memcg_kmem_commit_charge(struct page *page,
|
|
|
- struct mem_cgroup *memcg, int order);
|
|
|
-void __memcg_kmem_uncharge_pages(struct page *page, int order);
|
|
|
+int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order);
|
|
|
+void __memcg_kmem_uncharge(struct page *page, int order);
|
|
|
|
|
|
/*
|
|
|
* helper for acessing a memcg's index. It will be used as an index in the
|
|
@@ -789,52 +786,30 @@ static inline bool __memcg_kmem_bypass(gfp_t gfp)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * memcg_kmem_newpage_charge: verify if a new kmem allocation is allowed.
|
|
|
- * @gfp: the gfp allocation flags.
|
|
|
- * @memcg: a pointer to the memcg this was charged against.
|
|
|
- * @order: allocation order.
|
|
|
+ * memcg_kmem_charge: charge a kmem page
|
|
|
+ * @page: page to charge
|
|
|
+ * @gfp: reclaim mode
|
|
|
+ * @order: allocation order
|
|
|
*
|
|
|
- * returns true if the memcg where the current task belongs can hold this
|
|
|
- * allocation.
|
|
|
- *
|
|
|
- * We return true automatically if this allocation is not to be accounted to
|
|
|
- * any memcg.
|
|
|
+ * Returns 0 on success, an error code on failure.
|
|
|
*/
|
|
|
-static inline bool
|
|
|
-memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg, int order)
|
|
|
+static __always_inline int memcg_kmem_charge(struct page *page,
|
|
|
+ gfp_t gfp, int order)
|
|
|
{
|
|
|
if (__memcg_kmem_bypass(gfp))
|
|
|
- return true;
|
|
|
- return __memcg_kmem_newpage_charge(gfp, memcg, order);
|
|
|
+ return 0;
|
|
|
+ return __memcg_kmem_charge(page, gfp, order);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * memcg_kmem_uncharge_pages: uncharge pages from memcg
|
|
|
- * @page: pointer to struct page being freed
|
|
|
- * @order: allocation order.
|
|
|
+ * memcg_kmem_uncharge: uncharge a kmem page
|
|
|
+ * @page: page to uncharge
|
|
|
+ * @order: allocation order
|
|
|
*/
|
|
|
-static inline void
|
|
|
-memcg_kmem_uncharge_pages(struct page *page, int order)
|
|
|
+static __always_inline void memcg_kmem_uncharge(struct page *page, int order)
|
|
|
{
|
|
|
if (memcg_kmem_enabled())
|
|
|
- __memcg_kmem_uncharge_pages(page, order);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * memcg_kmem_commit_charge: embeds correct memcg in a page
|
|
|
- * @page: pointer to struct page recently allocated
|
|
|
- * @memcg: the memcg structure we charged against
|
|
|
- * @order: allocation order.
|
|
|
- *
|
|
|
- * Needs to be called after memcg_kmem_newpage_charge, regardless of success or
|
|
|
- * failure of the allocation. if @page is NULL, this function will revert the
|
|
|
- * charges. Otherwise, it will commit @page to @memcg.
|
|
|
- */
|
|
|
-static inline void
|
|
|
-memcg_kmem_commit_charge(struct page *page, struct mem_cgroup *memcg, int order)
|
|
|
-{
|
|
|
- if (memcg_kmem_enabled() && memcg)
|
|
|
- __memcg_kmem_commit_charge(page, memcg, order);
|
|
|
+ __memcg_kmem_uncharge(page, order);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -878,18 +853,12 @@ static inline bool memcg_kmem_is_active(struct mem_cgroup *memcg)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-static inline bool
|
|
|
-memcg_kmem_newpage_charge(gfp_t gfp, struct mem_cgroup **memcg, int order)
|
|
|
-{
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
-static inline void memcg_kmem_uncharge_pages(struct page *page, int order)
|
|
|
+static inline int memcg_kmem_charge(struct page *page, gfp_t gfp, int order)
|
|
|
{
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
-static inline void
|
|
|
-memcg_kmem_commit_charge(struct page *page, struct mem_cgroup *memcg, int order)
|
|
|
+static inline void memcg_kmem_uncharge(struct page *page, int order)
|
|
|
{
|
|
|
}
|
|
|
|