On Wed, Mar 9, 2011 at 10:18 PM, Ben Blum <bblum@xxxxxxxxxxxxxx> wrote: >> This BUG_ON() seems unnecessary, given the i++ directly above it. > > It's meant to communicate that the loop must go through at least once, > so that 'struct cgroup *oldcgrp' will be initialised within a loop later > (setting it to NULL in the beginning is just to shut up the compiler.) Right, but it's a do {} while() loop with no break in it - it's impossible to not go through at least once... >> Should we be setting failed_ss here? Doesn't that mean that if all >> subsystems pass the can_attach() check but the first one fails a >> can_attach_task() check, we don't call any cancel_attach() methods? >> >> What are the rollback semantics for failing a can_attach_task() check? > > They are not called in that order - it's for_each_subsys { can_attach(); > can_attach_task(); }. Oh, fair point - I misread that. > Although if the deal is that cancel_attach reverts > the things that can_attach does (and can_attach_task is separate) (is > this the case? it should probably go in the documentation), then passing > a can_attach and failing a can_attach_task should cause cancel_attach to > get called for that subsystem, which in this code it doesn't. Something > like: > > retval = ss->can_attach(); > if (retval) { > failed_ss = ss; > goto out_cancel_attach; > } > retval = ss->can_attach_task(); > if (retval) { > failed_ss = ss; > cancel_extra_ss = true; > goto out_cancel_attach; > } Yes, but maybe call the flag cancel_failed_ss? Slightly more obvious, to me at least. >> > + ? ? ? ? ? ? ? ? ? ? ? BUG_ON(!thread_group_leader(tsk)); >> >> Can this race with an exiting/execing group leader? > > No, rcu_read_lock() is held. > But rcu_read_lock() doesn't stop any actions - it just stops the data structures from going away. Can't leadership change during an execve()? > (However, I did try to test it, and it looks like if a leader calls > sys_exit() then the whole group goes away; is this actually guaranteed?) I think so, but maybe not instantaneously. Paul _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers