{"id":2175254,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2175254/?format=json","project":{"id":26,"url":"http://patchwork.ozlabs.org/api/1.0/projects/26/?format=json","name":"Netfilter Development","link_name":"netfilter-devel","list_id":"netfilter-devel.vger.kernel.org","list_email":"netfilter-devel@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20251217162744.352391-3-mkoutny@suse.com>","date":"2025-12-17T16:27:34","name":"[2/4] cgroup: Introduce cgroup_level() helper","commit_ref":null,"pull_url":null,"state":"handled-elsewhere","archived":true,"hash":"9aa378838ded889be984d9e77807432c29d1d8a0","submitter":{"id":74126,"url":"http://patchwork.ozlabs.org/api/1.0/people/74126/?format=json","name":"Michal Koutný","email":"mkoutny@suse.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/netfilter-devel/patch/20251217162744.352391-3-mkoutny@suse.com/mbox/","series":[{"id":485721,"url":"http://patchwork.ozlabs.org/api/1.0/series/485721/?format=json","date":"2025-12-17T16:27:32","name":"Use __counted_by for ancestor arrays","version":1,"mbox":"http://patchwork.ozlabs.org/series/485721/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2175254/checks/","tags":{},"headers":{"Return-Path":"\n <netfilter-devel+bounces-10146-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","netfilter-devel@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256\n header.s=google header.b=g0nSmNmP;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=netfilter-devel+bounces-10146-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com\n header.b=\"g0nSmNmP\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.221.48","smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=suse.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=suse.com"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4dWfgx2ly8z1y0P\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 18 Dec 2025 03:41:17 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 98C2630B2AC6\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 17 Dec 2025 16:31:28 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 9FA523563D2;\n\tWed, 17 Dec 2025 16:28:09 +0000 (UTC)","from mail-wr1-f48.google.com (mail-wr1-f48.google.com\n [209.85.221.48])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id CA4FB3557F9\n\tfor <netfilter-devel@vger.kernel.org>; Wed, 17 Dec 2025 16:28:05 +0000 (UTC)","by mail-wr1-f48.google.com with SMTP id\n ffacd0b85a97d-42fb0fc5aa9so2418015f8f.1\n        for <netfilter-devel@vger.kernel.org>;\n Wed, 17 Dec 2025 08:28:05 -0800 (PST)","from blackdock.suse.cz (nat2.prg.suse.com. [195.250.132.146])\n        by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-4310adeee0esm5728364f8f.29.2025.12.17.08.28.02\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Wed, 17 Dec 2025 08:28:03 -0800 (PST)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1765988888; cv=none;\n b=MRJCo3hsp14PwG/YaLSvGEuGUwWpOTwPMNN2tWp+4fOms+WJaid4Qt/r+3WjmZu/JGTJPimMLC/f94aKANN/amqBjVbFG+Fz5yQ3R6c72NcZBwj60RS+1MBfYgpL/1LODr17idY2FZzKlhCoaUuZkZlLVG/qR20VoaUxHbGBkAM=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1765988888; c=relaxed/simple;\n\tbh=jqBZIn02NWMcecKP606Y1uEX4V9j1/cIbAV2uLmFwFc=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=FTaw8Vlb1uzKyEIu0AVjxXN0cLM0akCPreh4qSTnNwRnm7u7cH525MxoSTIzfCPqwULn/NUlMRbpudYFNQ055j/Od8+CXpYYR5/OTwhGavECnlynfw+4HdVmFeidcG0IWCFOxedCUS1kRSQU+YxjDl4Lj5mGv7+vHU0Z2qiNOTk=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=suse.com;\n spf=pass smtp.mailfrom=suse.com;\n dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com\n header.b=g0nSmNmP; arc=none smtp.client-ip=209.85.221.48","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=suse.com; s=google; t=1765988884; x=1766593684;\n darn=vger.kernel.org;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=D5p3p8kAejxs1YQJhv0WnbRr/UVt3w2bGs3E+oMVl6E=;\n        b=g0nSmNmPe0I1hSFsbHvi4tSbETWwrYGb7BvgFGNOZA6f9X+Eq/sAZkF7l8espN3o9L\n         TjHpmufh5VcGptfW1SM5uHG5sa60ZQdS3yiJOmn4Xygh5wvlq6s0oyQZRcVr8tPEXHWe\n         klSU8aGYAEe9BWAP180QufjkwUmjvyZJd65JZ4yx0EoJvlMWHhwEFHhMSESVX70hR8SR\n         j71mbpBqvQNiMcvMaEvtvlixYYrYdnq3gY/o8gyjVBErEAyl8zemnGymBzo/v7SDMy42\n         KY75AkOJgM5pzvBARcfyRRswG6D0wwyrgNMTun2Yp4qdS8mgCHwchnJjdsAyx1fN5ALe\n         eElA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20230601; t=1765988884; x=1766593684;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=D5p3p8kAejxs1YQJhv0WnbRr/UVt3w2bGs3E+oMVl6E=;\n        b=DIsRT7Si2n3+HUF8AFhwzae3c2hvgBgKjfkS6QdxNg3tIWZZqU4AHv/EV0DIBgrxp7\n         RkWjCO3AsUFThxEjQZMizJTkZZjx7xrRWrU7P9E2TvaVyL0HUflVBEmItaSFxQUAyRQA\n         hpnCo7EvuLkzOFlH1zuz1gpymcunfpV+/FuuLwiOK9D70IA6D3gq3kcwmwA/bk8gU8PB\n         eM46eU2eGaFTQBFIBtQiDzVzgsIdnk/7d6/iqcVN+1GWtyO49ZgS6YZAe6bOR66ldTiQ\n         4vwotaNYgKHJm7H4H0qPWOTC6xXraiO9y+61LCK90zETcjIWPRtxvWVVxWxo0y9VfYwA\n         sUGA==","X-Forwarded-Encrypted":"i=1;\n AJvYcCWMfG/dgTmoy2DtStgjDxWBkKA6vB6EmaZQBdcuLbPsDpejxjHUtfKSQ0U1WtLwgpw1XpCx+beQBfwSEyXxHXs=@vger.kernel.org","X-Gm-Message-State":"AOJu0YydDEm9AU/7QniW6hNEGjoutJ3ReebWFT3XQLvlH1+nFMIM3yKt\n\tQR0ItLcE7fVPsMc+LCdfUG2Nju9AU1u4HoBkqAjuDnGYzL2bIbtemadp2Nomvp4LTmCe9blhDUG\n\trDTX2","X-Gm-Gg":"AY/fxX7ZSqLnfBR6PKGCIWM4UXdp/AAQdJo1Yw8Wcdbbu+RlqCyw8+g2AkLA9vEKE0h\n\tp93ugDDLiSFRr7kwup1DI99CI7CYItQpDReKzrvei9E8ugIvRrLPUdgSKzt0LyJs2o6NPZ8nQOg\n\tocdfErXUmI2lk5gJjf2tSGug6XeSTnE00w4fi1rkfLLC2Z/Cvf25HKXGJwSkOl22Uw8/rtGQWSN\n\tij8Wx5n89KtOo/BBi8KABFcdHsjDurlvcyNIEN6eTjUG74d4ij6j0pgrEhAhmZHzERAmUbVTHES\n\tQHO6iOf6EQ1R3U4imR9P08eCW3AHQghdi/Ht/aCkSY6+n79m35vj/yIQtwZMTF771/mse1bvmqy\n\tJgE1efCWgy2sMH9acQ8NuDClwVYQYx0+PElKHTOTqXlrK8Kf7I+M8ahaS3TqmcOL10WBE76mDEM\n\t8xtH9zWkttWQnf7xEoVe0KHA91SgCjfeI=","X-Google-Smtp-Source":"\n AGHT+IGpydpE/x5zxrviDhKfJqjEaKSG+Hi2wTDqQX9lTrcKDco/8aBmmWcByjoue9ZRozmJ4alpSw==","X-Received":"by 2002:a05:6000:186d:b0:431:5ca:c1b7 with SMTP id\n ffacd0b85a97d-43105cac2d6mr7328202f8f.23.1765988883910;\n        Wed, 17 Dec 2025 08:28:03 -0800 (PST)","From":"=?utf-8?q?Michal_Koutn=C3=BD?= <mkoutny@suse.com>","To":"linux-block@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tcgroups@vger.kernel.org,\n\tlinux-trace-kernel@vger.kernel.org,\n\tbpf@vger.kernel.org,\n\tnetfilter-devel@vger.kernel.org,\n\tcoreteam@netfilter.org,\n\tnetdev@vger.kernel.org","Cc":"=?utf-8?q?Michal_Koutn=C3=BD?= <mkoutny@suse.com>,\n Yu Kuai <yukuai@fnnas.com>, Jens Axboe <axboe@kernel.dk>,\n Tejun Heo <tj@kernel.org>, Josef Bacik <josef@toxicpanda.com>,\n Johannes Weiner <hannes@cmpxchg.org>, Steven Rostedt <rostedt@goodmis.org>,\n Masami Hiramatsu <mhiramat@kernel.org>,\n Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,\n Alexei Starovoitov <ast@kernel.org>, Daniel Borkmann <daniel@iogearbox.net>,\n Andrii Nakryiko <andrii@kernel.org>, Martin KaFai Lau <martin.lau@linux.dev>,\n Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,\n Yonghong Song <yonghong.song@linux.dev>,\n John Fastabend <john.fastabend@gmail.com>, KP Singh <kpsingh@kernel.org>,\n Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,\n Jiri Olsa <jolsa@kernel.org>, Pablo Neira Ayuso <pablo@netfilter.org>,\n Jozsef Kadlecsik <kadlec@netfilter.org>, Florian Westphal <fw@strlen.de>,\n Phil Sutter <phil@nwl.cc>, \"David S. Miller\" <davem@davemloft.net>,\n Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>,\n Paolo Abeni <pabeni@redhat.com>, Simon Horman <horms@kernel.org>","Subject":"[PATCH 2/4] cgroup: Introduce cgroup_level() helper","Date":"Wed, 17 Dec 2025 17:27:34 +0100","Message-ID":"<20251217162744.352391-3-mkoutny@suse.com>","X-Mailer":"git-send-email 2.52.0","In-Reply-To":"<20251217162744.352391-1-mkoutny@suse.com>","References":"<20251217162744.352391-1-mkoutny@suse.com>","Precedence":"bulk","X-Mailing-List":"netfilter-devel@vger.kernel.org","List-Id":"<netfilter-devel.vger.kernel.org>","List-Subscribe":"<mailto:netfilter-devel+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:netfilter-devel+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit"},"content":"This is a no functional change to hide physical storage of cgroup's\nlevel and it allows subesequent conversion of the storage.\n\nSigned-off-by: Michal Koutný <mkoutny@suse.com>\n---\n block/bfq-iosched.c           |  2 +-\n block/blk-iocost.c            |  4 ++--\n include/linux/cgroup.h        | 18 +++++++++++++++---\n include/trace/events/cgroup.h |  8 ++++----\n kernel/bpf/helpers.c          |  2 +-\n kernel/cgroup/cgroup.c        |  4 ++--\n net/netfilter/nft_socket.c    |  2 +-\n 7 files changed, 26 insertions(+), 14 deletions(-)","diff":"diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c\nindex 4a8d3d96bfe49..f293bab068274 100644\n--- a/block/bfq-iosched.c\n+++ b/block/bfq-iosched.c\n@@ -601,7 +601,7 @@ static bool bfqq_request_over_limit(struct bfq_data *bfqd,\n \t\tgoto out;\n \n \t/* +1 for bfqq entity, root cgroup not included */\n-\tdepth = bfqg_to_blkg(bfqq_group(bfqq))->blkcg->css.cgroup->level + 1;\n+\tdepth = cgroup_level(bfqg_to_blkg(bfqq_group(bfqq))->blkcg->css.cgroup) + 1;\n \tif (depth > alloc_depth) {\n \t\tspin_unlock_irq(&bfqd->lock);\n \t\tif (entities != inline_entities)\ndiff --git a/block/blk-iocost.c b/block/blk-iocost.c\nindex a0416927d33dc..b4eebe61dca7f 100644\n--- a/block/blk-iocost.c\n+++ b/block/blk-iocost.c\n@@ -2962,7 +2962,7 @@ static void ioc_cpd_free(struct blkcg_policy_data *cpd)\n static struct blkg_policy_data *ioc_pd_alloc(struct gendisk *disk,\n \t\tstruct blkcg *blkcg, gfp_t gfp)\n {\n-\tint levels = blkcg->css.cgroup->level + 1;\n+\tint levels = cgroup_level(blkcg->css.cgroup) + 1;\n \tstruct ioc_gq *iocg;\n \n \tiocg = kzalloc_node(struct_size(iocg, ancestors, levels), gfp,\n@@ -3003,7 +3003,7 @@ static void ioc_pd_init(struct blkg_policy_data *pd)\n \tinit_waitqueue_head(&iocg->waitq);\n \thrtimer_setup(&iocg->waitq_timer, iocg_waitq_timer_fn, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);\n \n-\tiocg->level = blkg->blkcg->css.cgroup->level;\n+\tiocg->level = cgroup_level(blkg->blkcg->css.cgroup)\n \n \tfor (tblkg = blkg; tblkg; tblkg = tblkg->parent) {\n \t\tstruct ioc_gq *tiocg = blkg_to_iocg(tblkg);\ndiff --git a/include/linux/cgroup.h b/include/linux/cgroup.h\nindex bc892e3b37eea..0290878ebad26 100644\n--- a/include/linux/cgroup.h\n+++ b/include/linux/cgroup.h\n@@ -525,6 +525,18 @@ static inline struct cgroup *cgroup_parent(struct cgroup *cgrp)\n \treturn NULL;\n }\n \n+/**\n+ * cgroup_level - cgroup depth\n+ * @cgrp: cgroup\n+ *\n+ * The depth this cgroup is at.  The root is at depth zero and each step down\n+ * the hierarchy increments the level.\n+ */\n+static inline int cgroup_level(struct cgroup *cgrp)\n+{\n+\treturn cgrp->level;\n+}\n+\n /**\n  * cgroup_is_descendant - test ancestry\n  * @cgrp: the cgroup to be tested\n@@ -537,9 +549,9 @@ static inline struct cgroup *cgroup_parent(struct cgroup *cgrp)\n static inline bool cgroup_is_descendant(struct cgroup *cgrp,\n \t\t\t\t\tstruct cgroup *ancestor)\n {\n-\tif (cgrp->root != ancestor->root || cgrp->level < ancestor->level)\n+\tif (cgrp->root != ancestor->root || cgroup_level(cgrp) < cgroup_level(ancestor))\n \t\treturn false;\n-\treturn cgrp->ancestors[ancestor->level] == ancestor;\n+\treturn cgrp->ancestors[cgroup_level(ancestor)] == ancestor;\n }\n \n /**\n@@ -556,7 +568,7 @@ static inline bool cgroup_is_descendant(struct cgroup *cgrp,\n static inline struct cgroup *cgroup_ancestor(struct cgroup *cgrp,\n \t\t\t\t\t     int ancestor_level)\n {\n-\tif (ancestor_level < 0 || ancestor_level > cgrp->level)\n+\tif (ancestor_level < 0 || ancestor_level > cgroup_level(cgrp))\n \t\treturn NULL;\n \treturn cgrp->ancestors[ancestor_level];\n }\ndiff --git a/include/trace/events/cgroup.h b/include/trace/events/cgroup.h\nindex ba9229af9a343..0a1bc91754b5e 100644\n--- a/include/trace/events/cgroup.h\n+++ b/include/trace/events/cgroup.h\n@@ -67,7 +67,7 @@ DECLARE_EVENT_CLASS(cgroup,\n \tTP_fast_assign(\n \t\t__entry->root = cgrp->root->hierarchy_id;\n \t\t__entry->id = cgroup_id(cgrp);\n-\t\t__entry->level = cgrp->level;\n+\t\t__entry->level = cgroup_level(cgrp);\n \t\t__assign_str(path);\n \t),\n \n@@ -136,7 +136,7 @@ DECLARE_EVENT_CLASS(cgroup_migrate,\n \tTP_fast_assign(\n \t\t__entry->dst_root = dst_cgrp->root->hierarchy_id;\n \t\t__entry->dst_id = cgroup_id(dst_cgrp);\n-\t\t__entry->dst_level = dst_cgrp->level;\n+\t\t__entry->dst_level = cgroup_level(dst_cgrp);\n \t\t__assign_str(dst_path);\n \t\t__entry->pid = task->pid;\n \t\t__assign_str(comm);\n@@ -180,7 +180,7 @@ DECLARE_EVENT_CLASS(cgroup_event,\n \tTP_fast_assign(\n \t\t__entry->root = cgrp->root->hierarchy_id;\n \t\t__entry->id = cgroup_id(cgrp);\n-\t\t__entry->level = cgrp->level;\n+\t\t__entry->level = cgroup_level(cgrp);\n \t\t__assign_str(path);\n \t\t__entry->val = val;\n \t),\n@@ -221,7 +221,7 @@ DECLARE_EVENT_CLASS(cgroup_rstat,\n \tTP_fast_assign(\n \t\t__entry->root = cgrp->root->hierarchy_id;\n \t\t__entry->id = cgroup_id(cgrp);\n-\t\t__entry->level = cgrp->level;\n+\t\t__entry->level = cgroup_level(cgrp);\n \t\t__entry->cpu = cpu;\n \t\t__entry->contended = contended;\n \t),\ndiff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c\nindex db72b96f9c8c8..b825f6e0a1c29 100644\n--- a/kernel/bpf/helpers.c\n+++ b/kernel/bpf/helpers.c\n@@ -2577,7 +2577,7 @@ __bpf_kfunc struct cgroup *bpf_cgroup_ancestor(struct cgroup *cgrp, int level)\n {\n \tstruct cgroup *ancestor;\n \n-\tif (level > cgrp->level || level < 0)\n+\tif (level > cgroup_level(cgrp) || level < 0)\n \t\treturn NULL;\n \n \t/* cgrp's refcnt could be 0 here, but ancestors can still be accessed */\ndiff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c\nindex 554a02ee298ba..e011f1dd6d87f 100644\n--- a/kernel/cgroup/cgroup.c\n+++ b/kernel/cgroup/cgroup.c\n@@ -5843,7 +5843,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,\n \tstruct cgroup_root *root = parent->root;\n \tstruct cgroup *cgrp, *tcgrp;\n \tstruct kernfs_node *kn;\n-\tint i, level = parent->level + 1;\n+\tint i, level = cgroup_level(parent) + 1;\n \tint ret;\n \n \t/* allocate the cgroup and its ID, 0 is reserved for the root */\n@@ -5884,7 +5884,7 @@ static struct cgroup *cgroup_create(struct cgroup *parent, const char *name,\n \t\tgoto out_stat_exit;\n \n \tfor (tcgrp = cgrp; tcgrp; tcgrp = cgroup_parent(tcgrp))\n-\t\tcgrp->ancestors[tcgrp->level] = tcgrp;\n+\t\tcgrp->ancestors[cgroup_level(tcgrp)] = tcgrp;\n \n \t/*\n \t * New cgroup inherits effective freeze counter, and\ndiff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c\nindex 36affbb697c2f..a5b0340924efb 100644\n--- a/net/netfilter/nft_socket.c\n+++ b/net/netfilter/nft_socket.c\n@@ -64,7 +64,7 @@ static noinline int nft_socket_cgroup_subtree_level(void)\n \tif (IS_ERR(cgrp))\n \t\treturn PTR_ERR(cgrp);\n \n-\tlevel = cgrp->level;\n+\tlevel = cgroup_level(cgrp);\n \n \tcgroup_put(cgrp);\n \n","prefixes":["2/4"]}