On 2014/5/10 5:13, Tejun Heo wrote: > cgroup_mount() uses dumb delay-and-retry logic to wait for cgroup_root > which is being destroyed. The retry currently loops inside > cgroup_mount() proper. This patch makes it return with > restart_syscall() instead so that retry travels out to userland > boundary. > > This slightly simplifies the logic and more importantly makes the > retry logic behave better when the wait for some reason becomes > lengthy or infinite by allowing the operation to be suspended or > terminated from userland. > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > --- > kernel/cgroup.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index 3083c5a..2755f33 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -1681,7 +1681,7 @@ static struct dentry *cgroup_mount(struct file_system_type *fs_type, > ret = parse_cgroupfs_options(data, &opts); > if (ret) > goto out_unlock; > -retry: > + > /* look for a matching existing root */ > if (!opts.subsys_mask && !opts.none && !opts.name) { > cgrp_dfl_root_visible = true; > @@ -1740,8 +1740,7 @@ retry: > if (!atomic_inc_not_zero(&root->cgrp.refcnt)) { > mutex_unlock(&cgroup_mutex); > msleep(10); > - mutex_lock(&cgroup_mutex); > - goto retry; > + return ERR_PTR(restart_syscall()); We leak memory allocated in parse_cgroupfs_options(). -- To unsubscribe from this list: send the line "unsubscribe cgroups" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html