On Tue, 02 Jun 2009 10:40:31 +0800 Li Zefan <lizf@xxxxxxxxxxxxxx> wrote: > The 'noprefix' option was introduced for backwards-compatibility of > cpuset, but actually it can be used when mounting other subsystems. > > This results in possibility of name collision, and now the collision > can really happen, because we have 'stat' file in both memory and > cpuacct subsystem: > > # mount -t cgroup -o noprefix,memory,cpuacct xxx /mnt > > Cgroup will happily mount the 2 subsystems, but only 'stat' file of > memory subsys can be seen. > > We don't want users to use nopreifx, and also want to avoid name > collision, so we change to allow noprefix only if mounting just > the cpuset subsystem. > > ... > > diff --git a/kernel/cgroup.c b/kernel/cgroup.c > index a7267bf..ad17f9d 100644 > --- a/kernel/cgroup.c > +++ b/kernel/cgroup.c > @@ -842,6 +842,11 @@ static int parse_cgroupfs_options(char *data, > struct cgroup_sb_opts *opts) > { > char *token, *o = data ?: "all"; > + unsigned long mask = (unsigned long)-1; > + > +#ifdef CONFIG_CPUSETS > + mask = ~(1 << cpuset_subsys_id); > +#endif This will actually produce the wrong result if cpuset_subsys_id >= 32. You want 1UL here. > opts->subsys_bits = 0; > opts->flags = 0; > @@ -886,6 +891,11 @@ static int parse_cgroupfs_options(char *data, > } > } > > + /* We allow noprefix only if mounting just the cpuset subsystem */ > + if (test_bit(ROOT_NOPREFIX, &opts->flags) && > + (opts->subsys_bits & mask)) > + return -EINVAL; > + uh, OK. I hope that comment is clear enough for anyone who wants to understand it. It doesn't explain _why_ this is done.. _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers