1. 28 Jan, 2016 15 commits
  2. 20 Jan, 2016 6 commits
  3. 19 Jan, 2016 1 commit
  4. 14 Jan, 2016 2 commits
  5. 13 Jan, 2016 6 commits
    • cgmanager: drop possibly expected failures to a WARN · bdaa0884
      Serge Hallyn authored
      Otherwise every lxc-info by a user who doesn't own all his cgroups
      will result in a set of error messages which are really innocuous.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • cgmanager: drop the cgm_supports_multiple_controllers bool · 3e376eee
      Serge Hallyn authored
      What we want is to make sure we dont' use controller 'all' if cgmanager
      doesn't support, if all our cgroups aren't the same, or if we cannot
      controll all our cgroups.  We were mixing some of these conditions.  Use
      cgm_all_controllers_same for all.  (Might want to rename it, but we want
      to stick with just one).
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • Merge pull request #748 from brauner/2015-01-01/lxc_ls · a5711932
      Serge Hallyn authored
      Reimplement lxc-ls in C
    • cgmanager - fix (again) previous commit · 5f4aafac
      Serge Hallyn authored
      Bad late-night commit.  We were doing a while loop for a reason.  Just
      initialize i to 0 before the while loop.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
    • reimplement lxc-ls in C · 15fd209a
      Christian Brauner authored
      This is a reimplementation of lxc-ls in C. It supports all features previously
      supported by lxc-ls.
      
      - All flags and parameters have the same name as before except when the user
        specifies a regex to filter container names by. In the previous Python
        implementation the regex was passed without paramter flag. The new
        C-implementation has the parameter flag -r/--regex for this.
      
      - Since we fork in lxc_attach() we need some form of IPC. Opening shared memory
        in the parent (mmap()) seems to be impractical since we don't know the size
        of the mapping beforehand. The other option is to open shared memory in the
        child and then to attach the parent to it but then we would need to resort to
        shm_open() or shmget(). Instead we go for a socketpair() here and wait for
        the child.
      - Note that we call lxc_attach() and pass ls_get() as exec function to it (To
        be even more specific: We do not pass ls_get() directly but rather a wrapper
        function for ls_get() which receives a few arguments to enable the
        communication between child and parent.). This implementation has the
        advantage that we do not depend on any lxc executables being present in the
        container. The gist in code:
      
      	ls_get()
      	{
      		/* Gather all relevant information */
      
      		/* get nested containers */
      		if (args->ls_nested && running) {
      			/* set up some more stuff */
      
      			/*
      			 * execute ls_get() in namespace of the container to
       			 * get nested containers
      			 */
        			c->attach(c, ls_get_wrapper, &wrapargs, &aopt, &out)
      
      			/* do some cleaning up */
      		}
      	}
      
      - When the user requests listing of nested containers without fancy-format
        enabled we want him to easily recognize which container is nested in which.
        So in this case we do not simply record the name but rather the name
        prepended with all the parents of the container:
      
      	grand-grand-parent/grand-parent/parent/child
      
      - Pretty-printing nested containers: Any call to list_*_containers() will
        return a sorted array of container names.  Furthermore, the recursive
        implementation of lxc_ls() will automatically put the containers in the
        correct order regarding their nesting. That is if we have the following
        nesting:
      
      	A
      	A --> S
      	A --> T --> O
      	A --> T --> O --> L
      	A --> T --> O --> M
      	A --> U
      	A --> U --> P
      	A --> U --> Q
      	B
      
        The array ls_get() will set up looks like this:
      	A S T O L M U P Q B
      
        Hence, we only need to keep an additional variable nestlvl to indicate the
        nesting level a container is at and use that to compute (a) the maximum field
        width we need to print out the container names and (b) to correctly indent
        each container according to its nesting level when printing it.
      
      - add comments to make the ls_get() function more accessible
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • cgmanager: fix abuse of 'i' · 449710f8
      Serge Hallyn authored
      we were initializing i to 0, then doing a while i <, but then a
      separate commit (by myself) used i as a generic variable in between
      those two.
      Signed-off-by: 's avatarSerge Hallyn <serge.hallyn@ubuntu.com>
  6. 12 Jan, 2016 10 commits
    • Merge pull request #742 from brauner/2015-12-12/split_bdev_into_modules · 3b117b85
      Serge Hallyn authored
      Split bdev into modules
    • Cleanup bdev.c after splitting into modules · cdb4e53a
      Christian Brauner authored
      The function
      
      	- bdev_get();
      
      becomes static. It is called from nowhere else so far and never appeared in any
      header.
      
      Minor changes
      
      	- Avoid comparisons between int and size_t types. Use size_t where
      	  possible else cast to size_t when it makes sense.
      	- insert missing spaces between operators
      	- put declarations for all static functions at the top
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxcnbd · bf76c012
      Christian Brauner authored
      The functions
      
      	- clone_attach_nbd();
      	- do_attach_nbd();
      	- nbd_busy();
      	- nbd_detach();
      	- nbd_get_partition();
      	- wait_for_partition();
      
      move from bdev.c to lxcnbd.c. They remain static
      
      The functions
      
      	- attach_nbd();
      	- detach_nbd_idx();
      	- nbd_clonepaths();
      	- nbd_create();
      	- nbd_destroy();
      	- nbd_detect();
      	- nbd_mount();
      	- nbd_umount();
      	- requires_nbd();
      
      move from bdev.c to lxcnbd.{c,h}. They all become extern.
      
      The struct
      
      	- struct nbd_attach_data
      
      moves from bdev.c to lxcnbd.c.
      
      Adapt Makefile.am to include lxcnbd.{c,h}.
      
      The structs
      
             - struct bdev; /* defined in bdev.h */
             - struct bdev_specs; /* defined in lxccontainer.h */
             - struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxcnbd.h as the functions
      associated with nbd need access to it.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxcrbd · 3ceb2820
      Christian Brauner authored
      The functions
      
      	- rbd_clonepaths();
      	- rbd_create();
      	- rbd_destroy();
      	- rbd_detect();
      	- rbd_mount();
      	- rbd_umount();
      
      move from bdev.c to lxcrbd.{c,h}. All functions previously declared static
      become extern.
      
      Adapt Makefile.am to include lxcrbd.{c,h}.
      
      The structs
      
             - struct bdev; /* defined in bdev.h */
             - struct bdev_specs; /* defined in lxccontainer.h */
             - struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxcrbd.h as the functions
      associated with rbd need access to it.
      
      Put:
      
             - #define __STDC_FORMAT_MACROS
      
      and include:
      
             - #include <inttypes.h>
      
      in lxcrbd.c so that the format specifier PRIu64 is available.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxcloop · 304b4cf3
      Christian Brauner authored
      The functions
      
      	- loop_clonepaths();
      	- loop_create();
      	- loop_destroy();
      	- loop_detect();
      	- loop_mount();
      	- loop_umount();
      
      move from bdev.c to lxcloop.{c,h}. All functions previously declared static
      become extern.
      
      The functions
      
      	- do_loop_create();
      	- find_free_loopdev_no_control();
      	- find_free_loopdev();
      
      move from bdev.c to lxcloop.c. They remain static.
      
      Adapt Makefile.am to include lxcloop.{c,h}.
      
      The structs
      
             - struct bdev; /* defined in bdev.h */
             - struct bdev_specs; /* defined in lxccontainer.h */
             - struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxcloop.h as the functions
      associated with loop need access to it.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxcdir · 9d983015
      Christian Brauner authored
      The functions
      
      	- dir_clonepaths();
      	- dir_create();
      	- dir_destroy();
      	- dir_detect();
      	- dir_mount();
      	- dir_umount();
      
      move from bdev.c to lxcdir.{c,h}. All functions which previously were static
      become extern.
      
      Adapt Makefile.am to include lxcdir.{c,h}.
      
      The structs
      
             - struct bdev; /* defined in bdev.h */
             - struct bdev_specs; /* defined in lxccontainer.h */
             - struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxcdir.h as the functions
      associated with dir need access to it.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxcaufs · 00f0a1f8
      Christian Brauner authored
      The functions
      
      	- aufs_clonepaths();
      	- aufs_create();
      	- aufs_destroy();
      	- aufs_detect();
      	- aufs_mount();
      	- aufs_umount();
      
      move from bdev.c to lxcaufs.{c,h}. All functions which previously were static
      become extern.
      
      Adapt Makefile.am to include lxcaufs.{c,h}.
      
      The structs
      
             - struct bdev; /* defined in bdev.h */
             - struct bdev_specs; /* defined in lxccontainer.h */
             - struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxcaufs.h as the functions
      associated with aufs need access to it.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxclvm · 2b9cbd53
      Christian Brauner authored
      The functions
      
      	- lvm_detect();
      	- lvm_mount();
      	- lvm_umount();
      	- lvm_compare_lv_attr();
      	- lvm_is_thin_volume();
      	- lvm_is_thin_pool();
      	- lvm_snapshot();
      	- lvm_clonepaths();
      	- lvm_destroy();
      	- lvm_create();
      
      move from bdev.c to lxclvm.{c,h}. All functions previously declared as static
      become public.
      
      Adapt Makefile.am to include lxclvm.{c,h}.
      
      The function:
      
      	- mount_unknown_fs();
      
      becomes public.
      
      Rationale: It is already called from different places and will be called by lvm,
      	and rdb. Also, it is defined twice exactly the same way. Once in conf.c
      	and once in bdev.c. Let's avoid that.
      	Defining the same function twice in different places just asks for
      	trouble.
      
      The functions:
      
      	- blk_getsize();
      	- detect_fs();
      	- do_mkfs();
      	- is_blktype();
      
      become public as they will be called for loop, lvm, and or rdb.
      
      Move the definition of:
      
      	- DEFAULT_FS_SIZE
      	- DEFAULT_FSTYPE
      
      from bdev.c to bdev.h to grant other modules access to it.
      
      Remove:
      	- find_fstype_cb();
      
      from conf.c. It is defined static in bdev.c
      
      Put:
      
      	- #define __STDC_FORMAT_MACROS
      
      and include:
      
      	- #include <inttypes.h>
      
      in lxclvm.c so that the format specifier PRIu64 is available.
      
      The structs:
      
      	- struct bdev; /* defined in bdev.h */
      	- struct bdev_specs; /* defined in lxccontainer.h */
      	- struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxclvm.h as the functions
      associated with lvm need access to it.
      
      Take the chance to restructure bdev.c:
      
      	- put bdev structs which have already been split out into separate
      	  modules at the top
      	- put declarations of all static functions at the top (This includes
      	  all functions associated with modules that have not yet already been
      	  put into a separate module.)
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Split bdev into modules: lxczfs · 8907f444
      Christian Brauner authored
      The functions:
      
      	- zfs_clone();
      	- zfs_clonepaths();
      	- zfs_create();
      	- zfs_destroy();
      	- zfs_detect();
      	- zfs_list_entry();
      	- zfs_mount();
      	- zfs_umount();
      
      move from bdev.c to lxczfs.{c,h}. All functions previously declared as static
      become public.
      
      Adapt Makefile.am to include lxczfs.{c,h}.
      
      The structs:
      
      	- struct bdev; /* defined in bdev.h */
      	- struct bdev_specs; /* defined in lxccontainer.h */
      	- struct lxc_conf; /* defined conf.h */
      
      are forward declared/put as incomplete types into lxczfs.h as the functions
      associated with zfs need access to it.
      
      Minor changes:
      
      	- Use exit(EXIT_FAILURE) instead of exit(1).
      	- Use brackets around else {} if the if {} did:
      		I.e. instead of:
      
      			if {
      				// do one;
      				// do two;
      			} else
      				// do three;
      
      		use:
      
      			if {
      				// do one;
      				// do two;
      			} else {
      				// do three;
      			}
      	- Instead of declaring char pointers and arrays on the same line, i.e.:
      
      		char arr[len], *p;
      
      	  do:
      
      		char arr[len];
      		char *p;
      
      	  which makes intentions a lot clearer.
      
      	- Since we require c99 anyway, use finer-grained scoping by declaring
      	  variables where they are needed instead of simply at the top.
      Signed-off-by: 's avatarChristian Brauner <christian.brauner@mailbox.org>
    • Merge pull request #750 from peti/patch-1 · 4dbfaf30
      Stéphane Graber authored
      bash completion: the 'have' command was deprecated in favor of '_have'