On 05/27/2011 10:36 AM, Dhaval Giani wrote:
> cgconfig: Do not touch subsystems not mounted by cgconfig
> 
> In its failure path, cgconfig should only touch the subsystems
> it had something to do with. Currently, it unmounts all the
> subsystems in the config file. Correct this.
> 
> Signed-off-by: Dhaval Giani <dhaval.gi...@gmail.com>

Merged and pushed, thanks!

> 
> ---
>  src/config.c |   32 +++++++++++++++++++++++---------
>  1 file changed, 23 insertions(+), 9 deletions(-)
> 
> Index: libcg/src/config.c
> ===================================================================
> --- libcg.orig/src/config.c
> +++ libcg/src/config.c
> @@ -431,6 +431,7 @@ static int cgroup_config_mount_fs(void)
>       int ret;
>       struct stat buff;
>       int i;
> +     int error;
>  
>       for (i = 0; i < config_table_index; i++) {
>               struct cg_mount_table_s *curr = &(config_mount_table[i]);
> @@ -439,30 +440,43 @@ static int cgroup_config_mount_fs(void)
>  
>               if (ret < 0 && errno != ENOENT) {
>                       last_errno = errno;
> -                     return ECGOTHER;
> +                     error = ECGOTHER;
> +                     goto out_err;
>               }
>  
>               if (errno == ENOENT) {
>                       ret = cg_mkdir_p(curr->mount.path);
> -                     if (ret)
> -                             return ret;
> +                     if (ret) {
> +                             error = ret;
> +                             goto out_err;
> +                     }
>               } else if (!S_ISDIR(buff.st_mode)) {
>                       errno = ENOTDIR;
>                       last_errno = errno;
> -                     return ECGOTHER;
> +                     error = ECGOTHER;
> +                     goto out_err;
>               }
>  
> -             ret = cgroup_config_ajdust_mount_options(curr);
> -             if (ret)
> -                     return ret;
> +             error = cgroup_config_ajdust_mount_options(curr);
> +             if (error)
> +                     goto out_err;
>  
>               ret = mount(CGROUP_FILESYSTEM, curr->mount.path,
>                               CGROUP_FILESYSTEM, 0, curr->name);
>  
> -             if (ret < 0)
> -                     return ECGMOUNTFAIL;
> +             if (ret < 0) {
> +                     error = ECGMOUNTFAIL;
> +                     goto out_err;
> +             }
>       }
>       return 0;
> +out_err:
> +     /*
> +      * If we come here, we have failed. Since we have touched only
> +      * mountpoints prior to i, we shall operate on only them now.
> +      */
> +     config_table_index = i;
> +     return error;
>  }
>  
>  /*
> 
> 
> 
> 
> ------------------------------------------------------------------------------
> vRanger cuts backup time in half-while increasing security.
> With the market-leading solution for virtual backup and recovery, 
> you get blazing-fast, flexible, and affordable data protection.
> Download your free trial now. 
> http://p.sf.net/sfu/quest-d2dcopy1
> 
> 
> 
> _______________________________________________
> Libcg-devel mailing list
> Libcg-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libcg-devel


------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to