]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mm: memcontrol: use __account_obj_stock() in the !locked path
authorJohannes Weiner <hannes@cmpxchg.org>
Mon, 2 Mar 2026 19:50:17 +0000 (14:50 -0500)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 5 Apr 2026 20:53:16 +0000 (13:53 -0700)
Make __account_obj_stock() usable for the case where the local trylock
failed.  Then switch refill_obj_stock() over to it.

This consolidates the mod_objcg_mlstate() call into one place and will
make the next patch easier to follow.

Link: https://lkml.kernel.org/r/20260302195305.620713-5-hannes@cmpxchg.org
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Shakeel Butt <shakeel.butt@linux.dev>
Acked-by: Roman Gushchin <roman.gushchin@linux.dev>
Reviewed-by: Vlastimil Babka (SUSE) <vbabka@kernel.org>
Reviewed-by: Hao Li <hao.li@linux.dev>
Cc: Johannes Weiner <jweiner@meta.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Muchun Song <muchun.song@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memcontrol.c

index c01da86e6a2e52ab9378ebb4640b0646498f71bd..15f552a85a5240b41b3236c34f81b58844050c4f 100644 (file)
@@ -2969,6 +2969,9 @@ static void __account_obj_stock(struct obj_cgroup *objcg,
 {
        int *bytes;
 
+       if (!stock)
+               goto direct;
+
        /*
         * Save vmstat data in stock and skip vmstat array update unless
         * accumulating over a page of vmstat data or when pgdat changes.
@@ -3008,6 +3011,7 @@ static void __account_obj_stock(struct obj_cgroup *objcg,
                        nr = 0;
                }
        }
+direct:
        if (nr)
                mod_objcg_mlstate(objcg, pgdat, idx, nr);
 }
@@ -3124,7 +3128,7 @@ static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes,
        stock = trylock_stock();
        if (!stock) {
                if (pgdat)
-                       mod_objcg_mlstate(objcg, pgdat, idx, nr_acct);
+                       __account_obj_stock(objcg, NULL, nr_acct, pgdat, idx);
                nr_pages = nr_bytes >> PAGE_SHIFT;
                nr_bytes = nr_bytes & (PAGE_SIZE - 1);
                atomic_add(nr_bytes, &objcg->nr_charged_bytes);