Hi Serge,

On Thu, Jan 23, 2014 at 11:28:46AM -0600, Serge Hallyn wrote:
> Quoting Robert Vogelgesang (vo...@users.sourceforge.net):
> > > +static long get_value(const char *dir, const char *file)
> > > +{
> > > + FILE *f;
> > > + char path[MAXPATHLEN];
> > > + int ret, retv;
> > > +
> > > + retv = snprintf(path, MAXPATHLEN, "%s/%s", dir, file);
> > > + if (retv < 0 || retv >= MAXPATHLEN)
> > > +         return 0;
> > > + f = fopen(path, "r");
> > > + ret = fscanf(f, "%d", &retv);
> > 
> > This is not sufficient, because cpuset.cpus and cpuset.mems do not contain
> > plain decimals, but lists and ranges of decimals.  You have to use %s here.
> 
> Interesting;  I cut-pasted this from code we had quite some time ago,
> else I would in fact have used lxc_read_from_file().

this does only prove that no-one noticed that it did not work "full-spec".

If you copy only the first digit, the cgroup is initialized and works.
The difference is only that it is restricted to using less resources
than the admin might have intended.


> 
> So given that in the past few years you are apparently the first person
> to use this without cgroup.clone_children and without ns cgroup, I have
> to ask is there another kernel you could just as easily be using?  If
> not then let's proceed;  if so then I'd rather yank code that will very
> rarely get tested.

No, I'm only the first person that is using 1.0.0.beta2 under RHEL-6.5.
lxc-0.9.0 does work with the standard RHEL-6 kernel, as long as the
admin doesn't care about cpuset cgroups.

RHEL-6 offers only one kernel for the x86_64 architecture (which is
currently version 2.6.32-431.3.1.el6.x86_64), there are no other
options, at least if you strictly follow Redhat.


> 
> (Of course long term I'd like to yank all the cgroupfs code :)

:-)

> 
[...]
> > >                   } else {
> > >                           /* if we didn't create the cgroup, then we have 
> > > to make sure that
> > >                            * further cgroups will be created properly
> > 
> > What about this "else" code path, shouldn't setup_cpuset_if_needed()
> > be called here, too?
> > 
> > Note: This comment is followed by a call to handle_cgroup_settings()
> > that has the first argument wrong, as I already wrote to the list
> > yesterday in the "Containers do not start with lxc-1.0.0.beta2 on
> > RHEL-6.5" thread.
> 
> I don't seem to have that email, so could you please re-iterate?

I basically comes down to this patch, against the cgroup.c from
the 1.0.0.beta2 tarball:

diff -u lxc-lxc-1.0.0.beta2/src/lxc/cgroup.c.orig 
lxc-lxc-1.0.0.beta2/src/lxc/cgroup.c
--- lxc-lxc-1.0.0.beta2/src/lxc/cgroup.c.orig   2014-01-16 01:07:33.000000000 
+0100
+++ lxc-lxc-1.0.0.beta2/src/lxc/cgroup.c        2014-01-22 17:50:48.169119388 
+0100
@@ -887,7 +887,7 @@
                                /* if we didn't create the cgroup, then we have 
to make sure that
                                 * further cgroups will be created properly
                                 */
-                               if (handle_cgroup_settings(mp, 
info_ptr->cgroup_path) < 0) {
+                               if 
(handle_cgroup_settings(info_ptr->designated_mount_point, 
info_ptr->cgroup_path) < 0) {
                                        ERROR("Could not set clone_children to 
1 for cpuset hierarchy in pre-existing cgroup.");
                                        goto cleanup_from_error;
                                }
@@ -2005,7 +2005,7 @@
                        if (r < 1 || buf[0] != '1') {
                                r = lxc_write_to_file(cc_path, "1", 1, false);
                                if (r < 0)
-                                       SYSERROR("failed to set 
memory.use_hiararchy to 1; continuing");
+                                       SYSERROR("failed to set 
memory.use_hierarchy to 1; continuing");
                        }
                        free(cc_path);
                }


I noticed this, because I originally had used the same arguments for
my version of setup_cpuset_if_needed(), which did not work.  "mp" is
set near the start of lxc_cgroupfs_create() and does not change in
the loop where this call to handle_cgroup_settings() takes place.

        Robert

_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to