One of key items in mprog API is revision for prog list. The revision number will be increased if the prog list changed, e.g., attach, detach or replace. Add 'revisions' field to struct cgroup_bpf, representing revisions for all cgroup related attachment types. The initial revision value is set to 1, the same as kernel mprog implementations. Signed-off-by: Yonghong Song <yonghong.song@xxxxxxxxx> --- include/linux/bpf-cgroup-defs.h | 1 + kernel/cgroup/cgroup.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/linux/bpf-cgroup-defs.h b/include/linux/bpf-cgroup-defs.h index 0985221d5478..a3cbbd00731a 100644 --- a/include/linux/bpf-cgroup-defs.h +++ b/include/linux/bpf-cgroup-defs.h @@ -62,6 +62,7 @@ struct cgroup_bpf { * when BPF_F_ALLOW_MULTI the list can have up to BPF_CGROUP_MAX_PROGS */ struct hlist_head progs[MAX_CGROUP_BPF_ATTACH_TYPE]; + atomic64_t revisions[MAX_CGROUP_BPF_ATTACH_TYPE]; u8 flags[MAX_CGROUP_BPF_ATTACH_TYPE]; /* list of cgroup shared storages */ diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index ac2db99941ca..dea7d12c8927 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -2053,7 +2053,7 @@ static int cgroup_reconfigure(struct fs_context *fc) static void init_cgroup_housekeeping(struct cgroup *cgrp) { struct cgroup_subsys *ss; - int ssid; + int i, ssid; INIT_LIST_HEAD(&cgrp->self.sibling); INIT_LIST_HEAD(&cgrp->self.children); @@ -2071,6 +2071,9 @@ static void init_cgroup_housekeeping(struct cgroup *cgrp) for_each_subsys(ss, ssid) INIT_LIST_HEAD(&cgrp->e_csets[ssid]); + for (i = 0; i < ARRAY_SIZE(cgrp->bpf.revisions); i++) + atomic64_set(&cgrp->bpf.revisions[i], 1); + init_waitqueue_head(&cgrp->offline_waitq); INIT_WORK(&cgrp->release_agent_work, cgroup1_release_agent); } -- 2.47.1