From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-184.mta0.migadu.com (out-184.mta0.migadu.com [91.218.175.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6A8E3016F1 for ; Mon, 20 Apr 2026 07:53:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.184 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776671619; cv=none; b=RLZF2lXO4a9x6Gi3JdI+03adfUjApRMPyUc2Gm5u6UOU7eTpH8PyaErywdH9Zk7KdfOpTp1l+sslxCtss8U78wLuctm3E9TIjiXBUnq+9LPwf0mL2WqNmgG1MBTTzCexstRZO3Bgk89qU1cfHtAw8whGX7wDHdv8k//o49AHUR8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776671619; c=relaxed/simple; bh=fAhHYyXJy/qdQhcvoNLjdY+spRGCj3+cJaLapBN8mko=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=N65J8F8b1ZSV4+BdUW6O8NQtIxOBkpvedqF+gCH35E035vgHskDAREklD/HdJ5GPKKvdd1iIhiGm+k97yevtFF3Y1+TOkYFdAQku7KBy/B+ws2Zwrzl7o9YtBJc9y0DMbytNUXORMTz8A6gj0Vdwo5ORz8oy9Jeo4i8r4tTzBRE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=k36nzmfo; arc=none smtp.client-ip=91.218.175.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="k36nzmfo" Message-ID: <5e7c23e5-3099-4130-bf51-4a402279d04f@linux.dev> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1776671615; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=swV9J9ku6T4GhxC0Y26vVCGGef/eqi9FgwpdlpZlx3A=; b=k36nzmfoYhxDH519poC12WhfI67RthlC2m1F2b2yNwzmypzpD38Q1e4xoLamzOIo65zxEK 0i/4UOvntu4+eUykT/6y+vjXZRxGpB5aCnPGF9QM/YInDop9qiImKRy4Te4ZED9uxJ+Wwq ssxfT1ikOR46MwCdOjwSRmG522ztAUU= Date: Mon, 20 Apr 2026 15:52:44 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Subject: Re: [PATCH] tools/cgroup/slabinfo: Fix use of slab.memcg_data To: Hongfu Li , roman.gushchin@linux.dev, vbabka@kernel.org, willy@infradead.org, harry@kernel.org, pasha.tatashin@soleen.com, surenb@google.com, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org References: <20260417020729.952897-1-lihongfu@kylinos.cn> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Hao Ge In-Reply-To: <20260417020729.952897-1-lihongfu@kylinos.cn> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_OUT Hi Hongfu On 2026/4/17 10:07, Hongfu Li wrote: > After the introduce slabobj_ext to support slab object extensions, the > memcg_slabinfo tool broke. An attempt to run it produces a trace like > this: > Traceback (most recent call last): > File "/usr/local/bin/drgn", line 8, in > sys.exit(_main()) > ^^^^^^^ > File "/usr/local/lib64/python3.11/site-packages/drgn/cli.py", line 688, in _main > runpy.run_path( > File "", line 291, in run_path > File "", line 98, in _run_module_code > File "", line 88, in _run_code > File "/root/memcg_slabinfo.py", line 225, in > main() > File "/root/memcg_slabinfo.py", line 195, in main > objcg_vec_raw = slab.memcg_data.value_() > AttributeError: 'struct slab' has no member 'memcg_data' > > Fixes: 21c690a349ba ("mm: introduce slabobj_ext to support slab object extensions") > Signed-off-by: Hongfu Li Good catch! > --- > tools/cgroup/memcg_slabinfo.py | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/tools/cgroup/memcg_slabinfo.py b/tools/cgroup/memcg_slabinfo.py > index 6bf4bde77903..e67dcfae1263 100644 > --- a/tools/cgroup/memcg_slabinfo.py > +++ b/tools/cgroup/memcg_slabinfo.py > @@ -33,6 +33,13 @@ def err(s): > sys.exit(1) > > > +def objexts_flags_mask(): > + try: > + return int(prog.constant('__NR_OBJEXTS_FLAGS')) - 1 > + except: > + return 0x7 > + > + > def find_memcg_ids(css=prog['root_mem_cgroup'].css, prefix=''): > if not list_empty(css.children.address_of_()): > for css in list_for_each_entry('struct cgroup_subsys_state', > @@ -192,23 +199,24 @@ def main(): > # look over all slab folios and look for objects belonging > # to the given memory cgroup > for slab in for_each_slab(prog): > - objcg_vec_raw = slab.memcg_data.value_() > - if objcg_vec_raw == 0: > + objext_vec_raw = slab.obj_exts.value_() Here, we should also check whether it equals OBJEXTS_ALLOC_FAIL, which indicates that the allocation of obj_exts has failed, Or have I missed something here? Thanks BR Hao > + if objext_vec_raw == 0: > continue > cache = slab.slab_cache > if not cache: > continue > addr = cache.value_() > caches[addr] = cache > - # clear the lowest bit to get the true obj_cgroups > - objcg_vec = Object(prog, 'struct obj_cgroup **', > - value=objcg_vec_raw & ~1) > > if addr not in stats: > stats[addr] = 0 > > + # clear OBJEXTS_FLAGS_MASK bits to get the true slabobj_ext > + mask = objexts_flags_mask() > + objext_vec = Object(prog, 'struct slabobj_ext *', > + value=objext_vec_raw & ~mask) > for i in range(oo_objects(cache)): > - if objcg_vec[i].value_() in obj_cgroups: > + if objext_vec[i].objcg.value_() in obj_cgroups: > stats[addr] += 1 > > for addr in caches: