From mboxrd@z Thu Jan 1 00:00:00 1970 From: Li Zefan Subject: Re: [PATCH cgroup/for-3.12 1/2] cgroup: fix subsystem file accesses on the root cgroup Date: Mon, 19 Aug 2013 10:23:41 +0800 Message-ID: <521181AD.7090700@huawei.com> References: <20130815154236.GG14606@htj.dyndns.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20130815154236.GG14606-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Tejun Heo Cc: cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org > 105347ba5 ("cgroup: make cgroup_file_open() rcu_read_lock() around > cgroup_css() and add cfent->css") added cfent->css to cache the > associted cgroup_subsys_state across file operations. > > A cfent is associated with single css throughout its lifetime and the > origimal commit initialized the cache pointer during cgroup_add_file() > and verified that it matches the actual one in cgroup_file_open(). > While this works fine for !root cgroups, it's broken for root cgroups > as files in a root cgroup are created before the css's are associated > with the cgroup and thus cgroup_css() call in cgroup_add_file() > returns NULL associating all cfents in the root cgroup with NULL css. > This makes cgroup_file_open() trigger WARN and fail with -ENODEV for > all !core subsystem files in the root cgroups. > > There's no reason to initialize cfent->css separately from > cgroup_add_file(). As the association never changes, > cgroup_file_open() can set it unconditionally every time and > containing the logic in cgroup_file_open() makes more sense anyway as > the only reason it's necessary is file->private_data being already > occupied. > > Fix it by setting cfent->css unconditionally from cgroup_file_open(). > > Signed-off-by: Tejun Heo Acked-by: Li Zefan