Actually I audited (to the best of my knowledge) all the paths in
cpusets and rebuild_sched_domains() is the last action. ie We drop the
lock right after it anyways. It's just it's embedded deep in the call
stack and therefor I cannot drop it at the higher level.
The only path where I think it's not safe is the cgroup destroy thing
where we do
cgroup.c
cgroup_lock();
for_each_cgroups(...)
cg->destroy();
cgroup_unlock();
So in theory it's just that one patch that really needs the workqueue
trick. But I do agree that it'll make it less tricky across the board.
So I'll pick up you work queue based patch, convert it to single
threaded, bang on a bit later today and send a patch on top of this one.
Max
--