From: Johannes Weiner Date: Mon, 2 Mar 2026 19:50:16 +0000 (-0500) Subject: mm: memcontrol: split out __obj_cgroup_charge() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=edb6abd31bff0746c687cf5af9ecacefaa90e9cb;p=thirdparty%2Flinux.git mm: memcontrol: split out __obj_cgroup_charge() Move the page charge and remainder calculation into its own function. It will make the slab stat refactor easier to follow. Link: https://lkml.kernel.org/r/20260302195305.620713-4-hannes@cmpxchg.org Signed-off-by: Johannes Weiner Acked-by: Shakeel Butt Acked-by: Roman Gushchin Reviewed-by: Vlastimil Babka (SUSE) Reviewed-by: Hao Li Cc: Johannes Weiner Cc: Michal Hocko Cc: Muchun Song Signed-off-by: Andrew Morton --- diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 5dd61e35f50d1..c01da86e6a2e5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3156,10 +3156,24 @@ out: obj_cgroup_uncharge_pages(objcg, nr_pages); } +static int __obj_cgroup_charge(struct obj_cgroup *objcg, gfp_t gfp, + size_t size, size_t *remainder) +{ + size_t charge_size; + int ret; + + charge_size = PAGE_ALIGN(size); + ret = obj_cgroup_charge_pages(objcg, gfp, charge_size >> PAGE_SHIFT); + if (!ret) + *remainder = charge_size - size; + + return ret; +} + static int obj_cgroup_charge_account(struct obj_cgroup *objcg, gfp_t gfp, size_t size, struct pglist_data *pgdat, enum node_stat_item idx) { - size_t charge_size, remainder; + size_t remainder; int ret; if (likely(consume_obj_stock(objcg, size, pgdat, idx))) @@ -3188,10 +3202,7 @@ static int obj_cgroup_charge_account(struct obj_cgroup *objcg, gfp_t gfp, size_t * bytes is (sizeof(object) + PAGE_SIZE - 2) if there is no data * race. */ - charge_size = PAGE_ALIGN(size); - remainder = charge_size - size; - - ret = obj_cgroup_charge_pages(objcg, gfp, charge_size >> PAGE_SHIFT); + ret = __obj_cgroup_charge(objcg, gfp, size, &remainder); if (!ret && (remainder || pgdat)) refill_obj_stock(objcg, remainder, false, size, pgdat, idx);