When there are sub-dirs, writing to memory.use_hierarchy returns -EBUSY,
this doesn't seem to fit the meaning of EBUSY, and is inconsistent with
memory.swappiness, which returns -EINVAL in this case.
Signed-off-by: Li Zefan <[email protected]>
---
mm/memcontrol.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index bc8f101..2497f7d 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1760,6 +1760,9 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
struct cgroup *parent = cont->parent;
struct mem_cgroup *parent_mem = NULL;
+ if (val != 0 && val != 1)
+ return -EINVAL;
+
if (parent)
parent_mem = mem_cgroup_from_cont(parent);
@@ -1773,12 +1776,9 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
* set if there are no children.
*/
if ((!parent_mem || !parent_mem->use_hierarchy) &&
- (val == 1 || val == 0)) {
- if (list_empty(&cont->children))
+ list_empty(&cont->children))
mem->use_hierarchy = val;
- else
- retval = -EBUSY;
- } else
+ else
retval = -EINVAL;
cgroup_unlock();
--
1.5.4.rc3
On Wed, 14 Jan 2009 16:10:52 +0800
Li Zefan <[email protected]> wrote:
> When there are sub-dirs, writing to memory.use_hierarchy returns -EBUSY,
> this doesn't seem to fit the meaning of EBUSY, and is inconsistent with
> memory.swappiness, which returns -EINVAL in this case.
>
Hmm...I'm not sure what error code is the best.
In usual, -EINVAL means parameter to write() is bad. In this case, it isn't.
Considering that, -EBUSY seems ok at returning error because of children.
How about change swappiness to return -EBUSY ?
Thanks,
-Kame
> Signed-off-by: Li Zefan <[email protected]>
> ---
> mm/memcontrol.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index bc8f101..2497f7d 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -1760,6 +1760,9 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
> struct cgroup *parent = cont->parent;
> struct mem_cgroup *parent_mem = NULL;
>
> + if (val != 0 && val != 1)
> + return -EINVAL;
> +
> if (parent)
> parent_mem = mem_cgroup_from_cont(parent);
>
> @@ -1773,12 +1776,9 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
> * set if there are no children.
> */
> if ((!parent_mem || !parent_mem->use_hierarchy) &&
> - (val == 1 || val == 0)) {
> - if (list_empty(&cont->children))
> + list_empty(&cont->children))
> mem->use_hierarchy = val;
> - else
> - retval = -EBUSY;
> - } else
> + else
> retval = -EINVAL;
> cgroup_unlock();
>
> --
> 1.5.4.rc3
>
On Wed, 14 Jan 2009 16:10:52 +0800, Li Zefan <[email protected]> wrote:
> When there are sub-dirs, writing to memory.use_hierarchy returns -EBUSY,
> this doesn't seem to fit the meaning of EBUSY, and is inconsistent with
> memory.swappiness, which returns -EINVAL in this case.
>
I also think -EBUSY is not so bad in this case.
Thanks,
Daisuke Nishimura.
> Signed-off-by: Li Zefan <[email protected]>
> ---
> mm/memcontrol.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index bc8f101..2497f7d 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -1760,6 +1760,9 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
> struct cgroup *parent = cont->parent;
> struct mem_cgroup *parent_mem = NULL;
>
> + if (val != 0 && val != 1)
> + return -EINVAL;
> +
> if (parent)
> parent_mem = mem_cgroup_from_cont(parent);
>
> @@ -1773,12 +1776,9 @@ static int mem_cgroup_hierarchy_write(struct cgroup *cont, struct cftype *cft,
> * set if there are no children.
> */
> if ((!parent_mem || !parent_mem->use_hierarchy) &&
> - (val == 1 || val == 0)) {
> - if (list_empty(&cont->children))
> + list_empty(&cont->children))
> mem->use_hierarchy = val;
> - else
> - retval = -EBUSY;
> - } else
> + else
> retval = -EINVAL;
> cgroup_unlock();
>
> --
> 1.5.4.rc3
* Li Zefan <[email protected]> [2009-01-14 16:10:52]:
> When there are sub-dirs, writing to memory.use_hierarchy returns -EBUSY,
> this doesn't seem to fit the meaning of EBUSY, and is inconsistent with
> memory.swappiness, which returns -EINVAL in this case.
>
> Signed-off-by: Li Zefan <[email protected]>
The patch does much more than the changelog says. The reason for EBUSY
is that the group is in use due to children or existing references and
tasks. I think EBUSY is the correct error code to return.
--
Balbir
Balbir Singh wrote:
> * Li Zefan <[email protected]> [2009-01-14 16:10:52]:
>
>> When there are sub-dirs, writing to memory.use_hierarchy returns -EBUSY,
>> this doesn't seem to fit the meaning of EBUSY, and is inconsistent with
>> memory.swappiness, which returns -EINVAL in this case.
>>
>> Signed-off-by: Li Zefan <[email protected]>
>
> The patch does much more than the changelog says. The reason for EBUSY
> is that the group is in use due to children or existing references and
> tasks. I think EBUSY is the correct error code to return.
>
Sounds reasonable for me. Thanks.
Regards
Li Zefan