Re: [PATCH 1/9] cgroup: use restart_syscall() for mount retries

From: Li Zefan
Date: Tue May 13 2014 - 22:54:01 EST


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 linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/