On 07/31/2014 10:08 AM, Ivana Varekova wrote:
>
> ----- Original Message -----
>> From: "Jan Chaloupka" <jchal...@redhat.com>
>> To: "Ivana Hutarova Varekova" <varek...@redhat.com>, 
>> libcg-devel@lists.sourceforge.net, "Dhaval Giani"
>> <dhaval.gi...@gmail.com>
>> Sent: Thursday, July 24, 2014 2:46:46 PM
>> Subject: Re: [Libcg-devel] [PATCH] cgcreate: use "*" character as a meta 
>> character for all mounted controllers
>>
>> Review comments now inlined
>
> Thanks for the review, I put "cgcreate_add_all_controllers" function to api. 
> And resend this patch as a patchset based on this change.

Thank you

> Add your comments regarding goto statements: I prefer to use them because the 
> code seems more readable for me. They are not bogus and they are used in 
> libcgroup. In libcgroup project there is no standard or recommendation not to 
> use this structure. If you insist on this change, please write me your 
> reasons to do this changes.

Functionality is equivallent. It was just my suggestion as I don't like 
goto statements if the construction can be written without them. 
However, I don't insist.

The patch is now OK for me.
>
> Ivana
>
>
>> On 07/23/2014 03:17 PM, Ivana Hutarova Varekova wrote:
>>>       This patch adds the possibility to use meta character "*" as a
>>>       shortcut for all mounted controllers. This meta character can be used
>>>       in "-g" option.
>>>       For example:
>>>       $ cgcreate -g *:first  -g cpu:second
>>>       $ lssubsys
>>>       cpuset:/
>>>       cpuset:/first
>>>       cpu,cpuacct:/
>>>       cpu,cpuacct:/first
>>>       cpu,cpuacct:/second
>>>       memory:/
>>>       memory:/first
>>>       devices:/
>>>       devices:/first
>>>       freezer:/
>>>       freezer:/first
>>>       net_cls,net_prio:/
>>>       net_cls,net_prio:/first
>>>       blkio:/
>>>       blkio:/first
>>>       perf_event:/
>>>       perf_event:/first
>>>       hugetlb:/
>>>       hugetlb:/first
>>>
>>>
>>> Signed-off-by: Ivana Hutarova Varekova <varek...@redhat.com>
Reviewed-by: Jan Chaloupka <jchal...@redhat.com>
>>> ---
>>>    doc/man/cgcreate.1   |    3 +-
>>>    src/tools/cgcreate.c |   82
>>>    +++++++++++++++++++++++++++++++++++++++++++++-----
>>>    2 files changed, 75 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/doc/man/cgcreate.1 b/doc/man/cgcreate.1
>>> index 7068073..557b5ae 100644
>>> --- a/doc/man/cgcreate.1
>>> +++ b/doc/man/cgcreate.1
>>> @@ -38,7 +38,8 @@ others permissions to the owners permissions).
>>>    .TP
>>>    .B -g <controllers>:<path>
>>>    defines control groups to be added.
>>> -\fBcontrollers\fR is a list of controllers and
>>> +\fBcontrollers\fR is a list of controllers. Character "*" can be used
>>> +as a shortcut for "all mounted controllers".
>>>    \fBpath\fR is the relative path to control groups
>>>    in the given controllers list. This option can be specified
>>>    multiple times.
>>> diff --git a/src/tools/cgcreate.c b/src/tools/cgcreate.c
>>> index 73abd91..b9c9b9d 100644
>>> --- a/src/tools/cgcreate.c
>>> +++ b/src/tools/cgcreate.c
>>> @@ -54,6 +54,57 @@ static void usage(int status, const char *program_name)
>>>     printf("  -t <tuid>:<tgid>              Owner of the tasks file\n");
>>>    }
>>>    
>>> +/* add all controllers to control cgroup structure */
>>> +int cgcreate_add_all_controllers(struct cgroup *cgroup)
>> "cgcreate_add_all_controllers" function should be placed in
>> wrapper.c as there are cgroup_add_controller and other functions working
>> with controllers.
>>
>>> +{
>>> +   int ret;
>>> +   void *handle;
>>> +   struct controller_data info;
>>> +   struct cgroup_controller *cgc;
>>> +
>>> +   /* go through the controller list */
>>> +   ret = cgroup_get_all_controller_begin(&handle, &info);
>>> +   if ((ret != 0) && (ret != ECGEOF)) {
>>> +           fprintf(stderr, "cannot read controller data: %s\n",
>>> +                   cgroup_strerror(ret));
>>> +           return ret;
>>> +   }
>>> +
>>> +   while (ret == 0) {
>>> +           if (info.hierarchy == 0) {
>>> +                   /* the controller is not attached to any hierarchy
>>> +                      skip it */
>>> +                   goto next;
>>> +           }
>>> +
>>> +           /* add mounted controller to cgroup structure */
>>> +           cgc = cgroup_add_controller(cgroup, info.name);
>>> +           if (!cgc) {
>>> +                   ret = ECGINVAL;
>>> +                   fprintf(stderr, "controller %s can't be add\n",
>>> +                           info.name);
>>> +           }
>>> +
>>> +next:
>> can be replaced with
>>
>> /* the controller is attached to at least one hierarchy */
>> if (info.hierarchy != 0) {
>>            /* add mounted controller to cgroup structure */
>>            cgc = cgroup_add_controller(cgroup, info.name);
>>            if (!cgc) {
>>                ret = ECGINVAL;
>>                fprintf(stderr, "controller %s can't be add\n",
>>                    info.name);
>>            }
>> }
>>
>>> +           ret = cgroup_get_all_controller_next(&handle, &info);
>>> +           if (ret && ret != ECGEOF)
>>> +                   goto end;
>> "goto end" can be replaced with break
>>
>>> +   }
>>> +
>>> +end:
>>> +   cgroup_get_all_controller_end(&handle);
>>> +
>>> +   if (ret == ECGEOF)
>>> +           ret = 0;
>>> +
>>> +   if (ret)
>>> +           fprintf(stderr,
>>> +                   "cgroup_get_controller_begin/next failed (%s)\n",
>>> +                   cgroup_strerror(ret));
>>> +
>>> +   return ret;
>>> +}
>>> +
>>>    
>>>    int main(int argc, char *argv[])
>>>    {
>>> @@ -195,16 +246,29 @@ int main(int argc, char *argv[])
>>>             /* add controllers to the new cgroup */
>>>             j = 0;
>>>             while (cgroup_list[i]->controllers[j]) {
>>> -                   cgc = cgroup_add_controller(cgroup,
>>> -                           cgroup_list[i]->controllers[j]);
>>> -                   if (!cgc) {
>>> -                           ret = ECGINVAL;
>>> -                           fprintf(stderr, "%s: "
>>> -                                   "controller %s can't be add\n",
>>> -                                   argv[0],
>>> +                   if (strcmp(cgroup_list[i]->controllers[j], "*") == 0) {
>>> +                           /* itis meta character -> add all controllers */
>>> +                           ret = cgcreate_add_all_controllers(cgroup);
>>> +                           if (ret != 0) {
>>> +                                   ret = ECGINVAL;
>>> +                                   fprintf(stderr, "%s: can't add ",
>>> +                                           argv[0]);
>>> +                                   fprintf(stderr, "all controllers\n");
>>> +                                   cgroup_free(&cgroup);
>>> +                                   goto err;
>>> +                           }
>>> +                   } else {
>>> +                           cgc = cgroup_add_controller(cgroup,
>>>                                     cgroup_list[i]->controllers[j]);
>>> -                           cgroup_free(&cgroup);
>>> -                           goto err;
>>> +                           if (!cgc) {
>>> +                                   ret = ECGINVAL;
>>> +                                   fprintf(stderr, "%s: ", argv[0]);
>>> +                                   fprintf(stderr, "controller %s",
>>> +                                           cgroup_list[i]->controllers[j]);
>>> +                                   fprintf(stderr, "can't be add\n");
>>> +                                   cgroup_free(&cgroup);
>>> +                                   goto err;
>>> +                           }
>>>                     }
>>>                     j++;
>>>             }
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Want fast and easy access to all the code in your enterprise? Index and
>>> search up to 200,000 lines of code with a free copy of Black Duck
>>> Code Sight - the same software that powers the world's largest code
>>> search on Ohloh, the Black Duck Open Hub! Try it now.
>>> http://p.sf.net/sfu/bds
>>> _______________________________________________
>>> Libcg-devel mailing list
>>> Libcg-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/libcg-devel

-- 
Jan Chaloupka
------------------------------
* Software Engineer          *
* ENG Base Operating Systems *
* Red Hat Czech, s. r. o.    *
* UTC+1 (CET), jchaloup      *


------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to