Re: [PATCH 2/5] mm: memcg: simplify objcg charge size and stock remainder math
From: Vlastimil Babka (SUSE)
Date: Tue Mar 03 2026 - 04:39:47 EST
On 3/2/26 20:50, Johannes Weiner wrote:
> From: Johannes Weiner <jweiner@xxxxxxxx>
>
> Use PAGE_ALIGN() and a more natural cache remainder calculation.
>
> Signed-off-by: Johannes Weiner <hannes@xxxxxxxxxxx>
Reviewed-by: Vlastimil Babka (SUSE) <vbabka@xxxxxxxxxx>
> ---
> mm/memcontrol.c | 16 ++++++----------
> 1 file changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index a975ab3aee10..0d0a77fedb00 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -3417,7 +3417,7 @@ static void refill_obj_stock(struct obj_cgroup *objcg, unsigned int nr_bytes,
> 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)
> {
> - unsigned int nr_pages, nr_bytes;
> + size_t charge_size, remainder;
> int ret;
>
> if (likely(consume_obj_stock(objcg, size, pgdat, idx)))
> @@ -3446,16 +3446,12 @@ 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.
> */
> - nr_pages = size >> PAGE_SHIFT;
> - nr_bytes = size & (PAGE_SIZE - 1);
> + charge_size = PAGE_ALIGN(size);
> + remainder = charge_size - size;
>
> - if (nr_bytes)
> - nr_pages += 1;
> -
> - ret = obj_cgroup_charge_pages(objcg, gfp, nr_pages);
> - if (!ret && (nr_bytes || pgdat))
> - refill_obj_stock(objcg, nr_bytes ? PAGE_SIZE - nr_bytes : 0,
> - false, size, pgdat, idx);
> + ret = obj_cgroup_charge_pages(objcg, gfp, charge_size >> PAGE_SHIFT);
> + if (!ret && (remainder || pgdat))
> + refill_obj_stock(objcg, remainder, false, size, pgdat, idx);
>
> return ret;
> }