From nobody Mon Feb 9 15:26:03 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA3CA3557F0 for ; Wed, 17 Dec 2025 16:28:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765988888; cv=none; b=J78tpeWUkAdaxr9zBT0OwNrEqw4TjtD+ebe+R0kS4wpd3nVfLc8shaCsVSGv9vJPKBe62paZn58X8l1SA2F9njgZnxA0k/HDG2ZAs0eN1OfWsHe0R6Pf1rzvDM33lt/xrAYaas+uqt+RfnPfJqGPKYpiioFgP0jYPvz8p1+G6TM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765988888; c=relaxed/simple; bh=jqBZIn02NWMcecKP606Y1uEX4V9j1/cIbAV2uLmFwFc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FTaw8Vlb1uzKyEIu0AVjxXN0cLM0akCPreh4qSTnNwRnm7u7cH525MxoSTIzfCPqwULn/NUlMRbpudYFNQ055j/Od8+CXpYYR5/OTwhGavECnlynfw+4HdVmFeidcG0IWCFOxedCUS1kRSQU+YxjDl4Lj5mGv7+vHU0Z2qiNOTk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=g0nSmNmP; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="g0nSmNmP" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-42fb0fc5aa9so2418016f8f.1 for ; Wed, 17 Dec 2025 08:28:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1765988884; x=1766593684; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=D5p3p8kAejxs1YQJhv0WnbRr/UVt3w2bGs3E+oMVl6E=; b=g0nSmNmPe0I1hSFsbHvi4tSbETWwrYGb7BvgFGNOZA6f9X+Eq/sAZkF7l8espN3o9L TjHpmufh5VcGptfW1SM5uHG5sa60ZQdS3yiJOmn4Xygh5wvlq6s0oyQZRcVr8tPEXHWe klSU8aGYAEe9BWAP180QufjkwUmjvyZJd65JZ4yx0EoJvlMWHhwEFHhMSESVX70hR8SR j71mbpBqvQNiMcvMaEvtvlixYYrYdnq3gY/o8gyjVBErEAyl8zemnGymBzo/v7SDMy42 KY75AkOJgM5pzvBARcfyRRswG6D0wwyrgNMTun2Yp4qdS8mgCHwchnJjdsAyx1fN5ALe eElA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765988884; x=1766593684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=D5p3p8kAejxs1YQJhv0WnbRr/UVt3w2bGs3E+oMVl6E=; b=dWKQnOrEyyaJp2HBPJ0ldFmF6TTT6SJoH8Mou9QbT9YBDp0cnBH6Vb33O758I4I/qy 001ZxUTuK/cZfQ5xGzUv0scYm/e7K2P24BZnceP0r/jfuZDwZ6pxSNYi/SU3ZZN6uUyV qy755eTRpXTSljs8GsXXKga37TKrCMcvCkjSKJ607pFUUPMtKAuLr423lPioD2abiYA4 lN4Yd5NXPPn8Oe5Cy9ldFR0+IWXsMGjlCHUKThn+6bo3MD1YMQK+h0AqIW3+WL/vhjbn q/QH6ovbvP0i0n9gzYotnLHlBYSmE/vODUCr2iYvn/jOizZWr/SoL1vsFMiGvUt8zX0O ebZA== X-Forwarded-Encrypted: i=1; AJvYcCVuztqCSQE9HPQ8f7MjOJAzB1RCmrH5EQul2SwmhDkZNhe46+AvdACZ6VGDc+J6QeiqYzlKMVNFpefWmWU=@vger.kernel.org X-Gm-Message-State: AOJu0YwHAq9S8CE+wYh4F0/JfTADh3ZVuqwOVHNlHWq1/jICYzq5R3EZ Ig7I9aAKd3yESxt65Pi5hMiAsi09o3TLG5+6gOWkRiJhAbUBNUsDb7LpAH+cRTsC1qA= X-Gm-Gg: AY/fxX65buwoW+TJxRh8wyZenwENxzz3sdQhZVOe09fVz/7YfkSCQNhVs4lv20Ki/kc VIqPMYXxlwMFoyjqY45+7au2cr2ZpEuHvMs+4pRx4M6Oq+BLf9yalCV7gUudxmjQV4E9+Q2g8Jl +rWYx24AbTpa6O1F4VY/FfejeKBBUxSKfSTAlcF9/87rRoXqK6jxW/kcGSEIjzCkdXYYc0STKsk EmVx1UfFDTtpokcirJivDJrbrIlv8qyl/kc4jPgQEiKx4DaZvUGn+84jh89XnLVLssbSq0NY7Vs 63K0r/fESPbKotHlIKLpPq7+ajyhIzVTjdFTS0tfNlVhpCmcnHW7PGy3ZdWJ5ykF8FYWnPLj0AD 43XAUt2xvMmEn4Cf6NlTGRZsu/a7WX7l16y4pq/FkIXRia9+MdNWVZ3FKp+Q5bRpzuzayy3mAV2 b63Fl6Y3PahL1EI4MYXoASK+A/cWPKgbw= X-Google-Smtp-Source: AGHT+IGpydpE/x5zxrviDhKfJqjEaKSG+Hi2wTDqQX9lTrcKDco/8aBmmWcByjoue9ZRozmJ4alpSw== X-Received: by 2002:a05:6000:186d:b0:431:5ca:c1b7 with SMTP id ffacd0b85a97d-43105cac2d6mr7328202f8f.23.1765988883910; Wed, 17 Dec 2025 08:28:03 -0800 (PST) Received: from blackdock.suse.cz (nat2.prg.suse.com. [195.250.132.146]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4310adeee0esm5728364f8f.29.2025.12.17.08.28.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Dec 2025 08:28:03 -0800 (PST) From: =?UTF-8?q?Michal=20Koutn=C3=BD?= To: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-trace-kernel@vger.kernel.org, bpf@vger.kernel.org, netfilter-devel@vger.kernel.org, coreteam@netfilter.org, netdev@vger.kernel.org Cc: =?UTF-8?q?Michal=20Koutn=C3=BD?= , Yu Kuai , Jens Axboe , Tejun Heo , Josef Bacik , Johannes Weiner , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Pablo Neira Ayuso , Jozsef Kadlecsik , Florian Westphal , Phil Sutter , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman 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: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This is a no functional change to hide physical storage of cgroup's level and it allows subesequent conversion of the storage. Signed-off-by: Michal Koutn=C3=BD --- block/bfq-iosched.c | 2 +- block/blk-iocost.c | 4 ++-- include/linux/cgroup.h | 18 +++++++++++++++--- include/trace/events/cgroup.h | 8 ++++---- kernel/bpf/helpers.c | 2 +- kernel/cgroup/cgroup.c | 4 ++-- net/netfilter/nft_socket.c | 2 +- 7 files changed, 26 insertions(+), 14 deletions(-) diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index 4a8d3d96bfe49..f293bab068274 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -601,7 +601,7 @@ static bool bfqq_request_over_limit(struct bfq_data *bf= qd, goto out; =20 /* +1 for bfqq entity, root cgroup not included */ - depth =3D bfqg_to_blkg(bfqq_group(bfqq))->blkcg->css.cgroup->level + 1; + depth =3D cgroup_level(bfqg_to_blkg(bfqq_group(bfqq))->blkcg->css.cgroup)= + 1; if (depth > alloc_depth) { spin_unlock_irq(&bfqd->lock); if (entities !=3D inline_entities) diff --git a/block/blk-iocost.c b/block/blk-iocost.c index a0416927d33dc..b4eebe61dca7f 100644 --- a/block/blk-iocost.c +++ b/block/blk-iocost.c @@ -2962,7 +2962,7 @@ static void ioc_cpd_free(struct blkcg_policy_data *cp= d) static struct blkg_policy_data *ioc_pd_alloc(struct gendisk *disk, struct blkcg *blkcg, gfp_t gfp) { - int levels =3D blkcg->css.cgroup->level + 1; + int levels =3D cgroup_level(blkcg->css.cgroup) + 1; struct ioc_gq *iocg; =20 iocg =3D kzalloc_node(struct_size(iocg, ancestors, levels), gfp, @@ -3003,7 +3003,7 @@ static void ioc_pd_init(struct blkg_policy_data *pd) init_waitqueue_head(&iocg->waitq); hrtimer_setup(&iocg->waitq_timer, iocg_waitq_timer_fn, CLOCK_MONOTONIC, H= RTIMER_MODE_ABS); =20 - iocg->level =3D blkg->blkcg->css.cgroup->level; + iocg->level =3D cgroup_level(blkg->blkcg->css.cgroup) =20 for (tblkg =3D blkg; tblkg; tblkg =3D tblkg->parent) { struct ioc_gq *tiocg =3D blkg_to_iocg(tblkg); diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index bc892e3b37eea..0290878ebad26 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -525,6 +525,18 @@ static inline struct cgroup *cgroup_parent(struct cgro= up *cgrp) return NULL; } =20 +/** + * cgroup_level - cgroup depth + * @cgrp: cgroup + * + * The depth this cgroup is at. The root is at depth zero and each step d= own + * the hierarchy increments the level. + */ +static inline int cgroup_level(struct cgroup *cgrp) +{ + return cgrp->level; +} + /** * cgroup_is_descendant - test ancestry * @cgrp: the cgroup to be tested @@ -537,9 +549,9 @@ static inline struct cgroup *cgroup_parent(struct cgrou= p *cgrp) static inline bool cgroup_is_descendant(struct cgroup *cgrp, struct cgroup *ancestor) { - if (cgrp->root !=3D ancestor->root || cgrp->level < ancestor->level) + if (cgrp->root !=3D ancestor->root || cgroup_level(cgrp) < cgroup_level(a= ncestor)) return false; - return cgrp->ancestors[ancestor->level] =3D=3D ancestor; + return cgrp->ancestors[cgroup_level(ancestor)] =3D=3D ancestor; } =20 /** @@ -556,7 +568,7 @@ static inline bool cgroup_is_descendant(struct cgroup *= cgrp, static inline struct cgroup *cgroup_ancestor(struct cgroup *cgrp, int ancestor_level) { - if (ancestor_level < 0 || ancestor_level > cgrp->level) + if (ancestor_level < 0 || ancestor_level > cgroup_level(cgrp)) return NULL; return cgrp->ancestors[ancestor_level]; } diff --git a/include/trace/events/cgroup.h b/include/trace/events/cgroup.h index ba9229af9a343..0a1bc91754b5e 100644 --- a/include/trace/events/cgroup.h +++ b/include/trace/events/cgroup.h @@ -67,7 +67,7 @@ DECLARE_EVENT_CLASS(cgroup, TP_fast_assign( __entry->root =3D cgrp->root->hierarchy_id; __entry->id =3D cgroup_id(cgrp); - __entry->level =3D cgrp->level; + __entry->level =3D cgroup_level(cgrp); __assign_str(path); ), =20 @@ -136,7 +136,7 @@ DECLARE_EVENT_CLASS(cgroup_migrate, TP_fast_assign( __entry->dst_root =3D dst_cgrp->root->hierarchy_id; __entry->dst_id =3D cgroup_id(dst_cgrp); - __entry->dst_level =3D dst_cgrp->level; + __entry->dst_level =3D cgroup_level(dst_cgrp); __assign_str(dst_path); __entry->pid =3D task->pid; __assign_str(comm); @@ -180,7 +180,7 @@ DECLARE_EVENT_CLASS(cgroup_event, TP_fast_assign( __entry->root =3D cgrp->root->hierarchy_id; __entry->id =3D cgroup_id(cgrp); - __entry->level =3D cgrp->level; + __entry->level =3D cgroup_level(cgrp); __assign_str(path); __entry->val =3D val; ), @@ -221,7 +221,7 @@ DECLARE_EVENT_CLASS(cgroup_rstat, TP_fast_assign( __entry->root =3D cgrp->root->hierarchy_id; __entry->id =3D cgroup_id(cgrp); - __entry->level =3D cgrp->level; + __entry->level =3D cgroup_level(cgrp); __entry->cpu =3D cpu; __entry->contended =3D contended; ), diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c index db72b96f9c8c8..b825f6e0a1c29 100644 --- a/kernel/bpf/helpers.c +++ b/kernel/bpf/helpers.c @@ -2577,7 +2577,7 @@ __bpf_kfunc struct cgroup *bpf_cgroup_ancestor(struct= cgroup *cgrp, int level) { struct cgroup *ancestor; =20 - if (level > cgrp->level || level < 0) + if (level > cgroup_level(cgrp) || level < 0) return NULL; =20 /* cgrp's refcnt could be 0 here, but ancestors can still be accessed */ diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index 554a02ee298ba..e011f1dd6d87f 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -5843,7 +5843,7 @@ static struct cgroup *cgroup_create(struct cgroup *pa= rent, const char *name, struct cgroup_root *root =3D parent->root; struct cgroup *cgrp, *tcgrp; struct kernfs_node *kn; - int i, level =3D parent->level + 1; + int i, level =3D cgroup_level(parent) + 1; int ret; =20 /* allocate the cgroup and its ID, 0 is reserved for the root */ @@ -5884,7 +5884,7 @@ static struct cgroup *cgroup_create(struct cgroup *pa= rent, const char *name, goto out_stat_exit; =20 for (tcgrp =3D cgrp; tcgrp; tcgrp =3D cgroup_parent(tcgrp)) - cgrp->ancestors[tcgrp->level] =3D tcgrp; + cgrp->ancestors[cgroup_level(tcgrp)] =3D tcgrp; =20 /* * New cgroup inherits effective freeze counter, and diff --git a/net/netfilter/nft_socket.c b/net/netfilter/nft_socket.c index 36affbb697c2f..a5b0340924efb 100644 --- a/net/netfilter/nft_socket.c +++ b/net/netfilter/nft_socket.c @@ -64,7 +64,7 @@ static noinline int nft_socket_cgroup_subtree_level(void) if (IS_ERR(cgrp)) return PTR_ERR(cgrp); =20 - level =3D cgrp->level; + level =3D cgroup_level(cgrp); =20 cgroup_put(cgrp); =20 --=20 2.52.0