On Fri, Dec 24, 2010 at 03:53:31AM -0800, Andrew Morton wrote: > On Fri, 24 Dec 2010 06:45:00 -0500 Ben Blum <bblum@xxxxxxxxxxxxxx> wrote: > > > > kmalloc() is allowed while holding a spinlock and NODEMASK_ALLOC() takes a > > > gfp_flags argument for that reason. > > > > Ah, it's only with GFP_KERNEL and friends. So changing the uses in > > cpuset_can_attach to GFP_ATOMIC would solve this concern, then? > > It would introduce an additional concern. GFP_ATOMIC is bad, for a > number of reasons. The main one of which is that it is vastly less > reliable than GFP_KERNEL. And making the cpuset code less reliable > is a regression, no? > > Please try to find a better solution. Good point. How about pre-allocating the nodemasks in cpuset_can_attach, and having a cpuset_cancel_attach function which can free them up? They could be stored in the struct cpuset (protected by cgroup_mutex) after being pre-allocated - but also only if a heap-allocation was required, so there might need to be an extra interface, like "NODEMASK_PREALLOC" (a no-op if heap not required, otherwise allocates and stores in the struct cpuset) and "NODEMASK_RETRIEVE"? -- Ben _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers