From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757383AbbLBBUU (ORCPT ); Tue, 1 Dec 2015 20:20:20 -0500 Received: from szxga01-in.huawei.com ([58.251.152.64]:38998 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752249AbbLBBUS (ORCPT ); Tue, 1 Dec 2015 20:20:18 -0500 Subject: Re: cpuset: return -EINVAL for legacy non-subset child creation attempt To: Mike Galbraith References: <1448983357.3225.148.camel@gmx.de> CC: lkml From: Zefan Li Message-ID: <565E4744.9020308@huawei.com> Date: Wed, 2 Dec 2015 09:20:04 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 MIME-Version: 1.0 In-Reply-To: <1448983357.3225.148.camel@gmx.de> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.19.236] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020204.565E474C.0111,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 70b10a2b2edbae040d92d1700a345e5d Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2015/12/1 23:22, Mike Galbraith wrote: > A legacy hierarchy child set that is not a subset of its parent is not > a permissions issue, it's an invalid configuration. Return -EINVAL. > It's sometimes arguable which errno should be used. In this case I don't see why we can't use EACCES. It's even documented in man page. EACCES Attempted to add, using write(2), a CPU or memory node to a cpuset, when that CPU or memory node was not already in its par- ent. Let's see another example. In mmap manual: EACCES A file descriptor refers to a non-regular file. We can argue fd of a non-regular file is an invalid configuration, but here we return EACCES. > Signed-off-by: Mike Galbraith > --- > kernel/cpuset.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > --- a/kernel/cpuset.c > +++ b/kernel/cpuset.c > @@ -472,7 +472,7 @@ static int validate_change(struct cpuset > par = parent_cs(cur); > > /* On legacy hiearchy, we must be a subset of our parent cpuset. */ > - ret = -EACCES; > + ret = -EINVAL; > if (!cgroup_subsys_on_dfl(cpuset_cgrp_subsys) && > !is_cpuset_subset(trial, par)) > goto out; > @@ -481,7 +481,6 @@ static int validate_change(struct cpuset > * If either I or some sibling (!= me) is exclusive, we can't > * overlap > */ > - ret = -EINVAL; > cpuset_for_each_child(c, css, par) { > if ((is_cpu_exclusive(trial) || is_cpu_exclusive(c)) && > c != cur && > > >