From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753540AbbDGUiZ (ORCPT ); Tue, 7 Apr 2015 16:38:25 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:34693 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753049AbbDGUiV (ORCPT ); Tue, 7 Apr 2015 16:38:21 -0400 Date: Tue, 7 Apr 2015 13:38:19 -0700 From: Andrew Morton To: Vladimir Davydov Cc: Johannes Weiner , Michal Hocko , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , , , Subject: Re: [PATCH -mm] slab: use cgroup ino for naming per memcg caches Message-Id: <20150407133819.993be7a53a3aa16311aba1f5@linux-foundation.org> In-Reply-To: <1428414798-12932-1-git-send-email-vdavydov@parallels.com> References: <1428414798-12932-1-git-send-email-vdavydov@parallels.com> X-Mailer: Sylpheed 3.4.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 7 Apr 2015 16:53:18 +0300 Vladimir Davydov wrote: > The name of a per memcg kmem cache consists of three parts: the global > kmem cache name, the cgroup name, and the css id. The latter is used to > guarantee cache name uniqueness. > > Since css ids are opaque to the userspace, in general it is impossible > to find a cache's owner cgroup given its name: there might be several > same-named cgroups with different parents so that their caches' names > will only differ by css id. Looking up the owner cgroup by a cache name, > however, could be useful for debugging. For instance, the cache name is > dumped to dmesg on a slab allocation failure. Another example is > /sys/kernel/slab, which exports some extra info/tunables for SLUB caches /proc/sys/kernel/slab? > referring to them by name. > > This patch substitutes the css id with cgroup inode number, which, just > like css id, is reserved until css free, so that the cache names are > still guaranteed to be unique, but, in contrast to css id, it can be > easily obtained from userspace. > > ... > > --- a/mm/slab_common.c > +++ b/mm/slab_common.c > @@ -478,7 +478,7 @@ void memcg_create_kmem_cache(struct mem_cgroup *memcg, > struct kmem_cache *root_cache) > { > static char memcg_name_buf[NAME_MAX + 1]; /* protected by slab_mutex */ > - struct cgroup_subsys_state *css = mem_cgroup_css(memcg); > + struct cgroup *cgroup; > struct memcg_cache_array *arr; > struct kmem_cache *s = NULL; > char *cache_name; > @@ -508,9 +508,10 @@ void memcg_create_kmem_cache(struct mem_cgroup *memcg, > if (arr->entries[idx]) > goto out_unlock; > > - cgroup_name(css->cgroup, memcg_name_buf, sizeof(memcg_name_buf)); > - cache_name = kasprintf(GFP_KERNEL, "%s(%d:%s)", root_cache->name, > - css->id, memcg_name_buf); > + cgroup = mem_cgroup_css(memcg)->cgroup; > + cgroup_name(cgroup, memcg_name_buf, sizeof(memcg_name_buf)); > + cache_name = kasprintf(GFP_KERNEL, "%s(%lu:%s)", root_cache->name, > + (unsigned long)cgroup_ino(cgroup), memcg_name_buf); > if (!cache_name) > goto out_unlock; Is this interface documented anywhere?