I think it is better when _misc_cg_res_alloc fails, it just calls
_misc_cg_res_free(cg, index)(add index parameter, it means ending of
iterator), so it can avoid calling ->free() that do not call ->alloc().
And in misc_cg_free, just call _misc_cg_res_free(cg, MISC_CG_RES_TYPES)
to free all.
Thanks
Ridong
On 2024/6/6 22:51, Haitao Huang wrote:
On Thu, 06 Jun 2024 08:37:31 -0500, chenridong <chenridong@xxxxxxxxxx>
wrote:
If _misc_cg_res_alloc fails, maybe some types do not call
->alloc(), but all types ->free() callback >will be called, is that ok?
Not sure I understand. Are you suggesting we ignore failures from
->alloc() callback in _misc_cg_res_alloc() as it is per-resource, and
have ->free() callback and resource provider of the failing type to
handle the failure internally?
IIUC, this failure only happens when a specific subcgroup is created
(memory running out for allocation) so failing that subcgroup as a
whole seems fine to me. Note the root node is static and no
pre-resource callbacks invoked by misc. And resource provider handles
its own allocations for root. In SGX case we too declare a static
object for corresponding root sgx_cgroup struct.
Note also misc cgroup (except for setting capacity[res] = 0 at root)
is all or nothing so no mechanism to tell user "this resource does not
work but others are fine in this particular cgroup."
Thanks
Haitao