linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [bug report] memcg: replace memcg ID idr with xarray
@ 2024-08-15 10:46 Dan Carpenter
  2024-08-15 15:51 ` Shakeel Butt
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2024-08-15 10:46 UTC (permalink / raw)
  To: Shakeel Butt; +Cc: linux-mm

Hello Shakeel Butt,

Commit ad80273d43b7 ("memcg: replace memcg ID idr with xarray") from
Aug 9, 2024 (linux-next), leads to the following Smatch static
checker warning:

	mm/memcontrol.c:3592 mem_cgroup_alloc()
	warn: passing zero to 'ERR_PTR'

mm/memcontrol.c
    3525 static struct mem_cgroup *mem_cgroup_alloc(struct mem_cgroup *parent)
    3526 {
    3527         struct memcg_vmstats_percpu *statc, *pstatc;
    3528         struct mem_cgroup *memcg;
    3529         int node, cpu;
    3530         int __maybe_unused i;
    3531         long error = -ENOMEM;
    3532 
    3533         memcg = kzalloc(struct_size(memcg, nodeinfo, nr_node_ids), GFP_KERNEL);
    3534         if (!memcg)
    3535                 return ERR_PTR(error);
    3536 
    3537         error = xa_alloc(&mem_cgroup_ids, &memcg->id.id, NULL,
    3538                          XA_LIMIT(1, MEM_CGROUP_ID_MAX), GFP_KERNEL);
    3539         if (error)
    3540                 goto fail;
    3541 
    3542         memcg->vmstats = kzalloc(sizeof(struct memcg_vmstats),
    3543                                  GFP_KERNEL_ACCOUNT);
    3544         if (!memcg->vmstats)
    3545                 goto fail;

These error paths should all return -ENOMEM.

    3546 
    3547         memcg->vmstats_percpu = alloc_percpu_gfp(struct memcg_vmstats_percpu,
    3548                                                  GFP_KERNEL_ACCOUNT);
    3549         if (!memcg->vmstats_percpu)
    3550                 goto fail;
                         ^^^^^^^^^

    3551 
    3552         for_each_possible_cpu(cpu) {
    3553                 if (parent)
    3554                         pstatc = per_cpu_ptr(parent->vmstats_percpu, cpu);
    3555                 statc = per_cpu_ptr(memcg->vmstats_percpu, cpu);
    3556                 statc->parent = parent ? pstatc : NULL;
    3557                 statc->vmstats = memcg->vmstats;
    3558         }
    3559 
    3560         for_each_node(node)
    3561                 if (!alloc_mem_cgroup_per_node_info(memcg, node))
    3562                         goto fail;
                                 ^^^^^^^^^^
    3563 
    3564         if (memcg_wb_domain_init(memcg, GFP_KERNEL))
    3565                 goto fail;
                         ^^^^^^^^^^
It might be nice to propogate the error code from memcg_wb_domain_init()

    3566 
    3567         INIT_WORK(&memcg->high_work, high_work_func);
    3568         vmpressure_init(&memcg->vmpressure);
    3569         INIT_LIST_HEAD(&memcg->memory_peaks);
    3570         INIT_LIST_HEAD(&memcg->swap_peaks);
    3571         spin_lock_init(&memcg->peaks_lock);
    3572         memcg->socket_pressure = jiffies;
    3573         memcg1_memcg_init(memcg);
    3574         memcg->kmemcg_id = -1;
    3575         INIT_LIST_HEAD(&memcg->objcg_list);
    3576 #ifdef CONFIG_CGROUP_WRITEBACK
    3577         INIT_LIST_HEAD(&memcg->cgwb_list);
    3578         for (i = 0; i < MEMCG_CGWB_FRN_CNT; i++)
    3579                 memcg->cgwb_frn[i].done =
    3580                         __WB_COMPLETION_INIT(&memcg_cgwb_frn_waitq);
    3581 #endif
    3582 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
    3583         spin_lock_init(&memcg->deferred_split_queue.split_queue_lock);
    3584         INIT_LIST_HEAD(&memcg->deferred_split_queue.split_queue);
    3585         memcg->deferred_split_queue.split_queue_len = 0;
    3586 #endif
    3587         lru_gen_init_memcg(memcg);
    3588         return memcg;
    3589 fail:
    3590         mem_cgroup_id_remove(memcg);
    3591         __mem_cgroup_free(memcg);
--> 3592         return ERR_PTR(error);
    3593 }

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [bug report] memcg: replace memcg ID idr with xarray
  2024-08-15 10:46 [bug report] memcg: replace memcg ID idr with xarray Dan Carpenter
@ 2024-08-15 15:51 ` Shakeel Butt
  0 siblings, 0 replies; 2+ messages in thread
From: Shakeel Butt @ 2024-08-15 15:51 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-mm

On Thu, Aug 15, 2024 at 01:46:03PM GMT, Dan Carpenter wrote:
> Hello Shakeel Butt,
> 
> Commit ad80273d43b7 ("memcg: replace memcg ID idr with xarray") from
> Aug 9, 2024 (linux-next), leads to the following Smatch static
> checker warning:
> 
> 	mm/memcontrol.c:3592 mem_cgroup_alloc()
> 	warn: passing zero to 'ERR_PTR'

Thanks a lot for the report. I will send v2 soon.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-08-15 15:51 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-15 10:46 [bug report] memcg: replace memcg ID idr with xarray Dan Carpenter
2024-08-15 15:51 ` Shakeel Butt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox