From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 79CBB8017D for ; Tue, 15 Sep 2026 17:24:36 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68FHNNC3006473; Tue, 15 Sep 2026 20:23:23 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68FHNNC3006473 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="qoC+Nvkj" Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68FHN4Zl006423 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 15 Sep 2026 20:23:04 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68FHN4Zl006423 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-49cf5bd2f12so49794015e9.1 for ; Tue, 15 Sep 2026 10:23:04 -0700 (PDT) X-Gm-Message-State: AFuF++kbhkcO6nzSgRUi9uHFe35JN2VdCHOeXoXp7rDN4j5Ua3fyRACS 2VLl2DqZfA6COhw4cuWTkxGcdTz753kkmObf5p4XBuuEJhx6af4XXqeqwJfQwXOAqqP23FgG2bK sltQreE0vJJ+megZ9Ty9VnSYrkAgT+dm/urlp8+0VYTghmHCtmoONVA== X-Gm-Gg: AYBFou1mM40eyOMxhRozYDqdnaDRK7l5Ho1WQHmBzZny+PVwoYEzVAZtkRroi3OQAxy 8J6pYWz0kHOEEgBANsR9SYQ/qMncVVjARKkF3AsHH/PVFBmb4pKMnsybNxbj/1IGyUplzK4ETJq 5faqluP0wufx40fqpW77q59DEELKpt+K2NSYNoTzKtH5xJEhevznnY8VBEU56t2+hlzA+pJlStM 9QduFeNMkjNxUVYhN35+KhTgwXsbLXlZdY0HHDpUNx01ve1rsIrlBVkNRs3XyUxyswhfRX8stF/ cidVL+NCptsHgQ8INJEWg0GTshEKu0a964G1BLSm2iBfJDT41L1e5vxz8awTsQ5acSf11lH+Ao2 34n36pcs/b9POcxW4/fJkrIt7UNKr X-Received: by 2002:a05:600c:19cb:b0:49c:eb17:cf3b with SMTP id 5b1f17b1804b1-49e7a6692afmr93399175e9.8.1789492984416; Tue, 15 Sep 2026 10:23:04 -0700 (PDT) X-Received: by 2002:a05:600c:19cb:b0:49c:eb17:cf3b with SMTP id 5b1f17b1804b1-49e7a6692afmr93398815e9.8.1789492983947; Tue, 15 Sep 2026 10:23:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1789492983; cv=none; d=google.com; s=arc-20260327; b=dJ4mLTYArUKpBDjUVtNsqQv+Pv5iSBHMixhRaKNSlk26CjKmeZoj3kpVstD2Aqwmjj CUA6QHe9xTnGEl1lITYQ9iMX05XeBZZCRVk3dOteiiHKCDDaECsDNQPeIU54TcW5fZoT 5gbD36sjMTggBV99GBo0o402lTnXEP2FZAYG9/tC/DQH5OuzkaQ2pVxOGnEKuZPA+tZ3 wDqLl6AO9SNy2uwiXtxvY9UqpPDaC5DVY4rv9tvpM0NhjTnr6Y3UqQXnfqRTA+rc8M47 mP9HxntIxg9yePtcAJxw12Tgs8DSijKWZctsvlcumL+0FM1dgCtu+sainHIrhVTRg1y1 au5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=4lVUrBjXyt8IpL1IFLQvoRyK/n3MYouJGX1s+8+FxQQ=; fh=QQvtjDaAlLft5IR2jnjma4lVp8TaaKU12WD0fWdFifQ=; b=NVkzhd0rLG9LZRmK7uatBUwkLctiASwS3mO4r2dsXLiLs014lb4+8jFzeikXJHf21N oB6WuIlZRKKjUObgsM41Seejhwc+k/Y5jcKCxBbOyItjCU8DkpXLq4TsPCgZiw/J+lcw s66yKZosGhXwxgSyMgd0GVrnreyFPSuxTNa+hzRH3edqZS7D4f1EGGD24T2fhrlz2WH5 E4jHomj0ljn1sf5JCpDymBOPtUxIF8h28aMPjWXEGfcno9hvGj70NKVNE+Aa3WfaHJ3e wDq6bPx3wxHZPv++lBblgolCi31joAhxngmrN+knNG9LF847r2lHzDqrgcthSDwzIFCZ oRLA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=qoC+Nvkj; spf=pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from relay.virtuozzo.com (relay.virtuozzo.com. [130.117.225.111]) by mx.google.com with ESMTPS id ffacd0b85a97d-4870beefdcesi474959f8f.42.2026.09.15.10.23.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2026 10:23:03 -0700 (PDT) Received-SPF: pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 130.117.225.111 as permitted sender) client-ip=130.117.225.111; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=qoC+Nvkj; spf=pass (google.com: domain of vladimir.riabchun@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=vladimir.riabchun@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=4lVUrBjXyt8IpL1IFLQvoRyK/n3MYouJGX1s+8+FxQQ=; b=qoC+Nvkj+pD/ j/q5CDLJfpuPfemkfA2hc+9zpnAyhfKsja07P/jEceT6hBtgjGDqoMMtFRKsVvW4m/zyYIaYzLlvU OIoAymvjT4+Tw4L+3kOdh33rq+XwKhxCVQUZU7s3x9FVuAMuT4KFqubg6xhw431pzHINCUNiMdI5f k+vBZK82A5i15Gl5sYlP+uW4LKNTqeDD9ah0yU43SnzWL38SAKJHf17P93XSf44qb4mEdgdA4Km4N 7fWU1p1WmfNZRI6XqAM5OrTH1HnJ2I9rOZaI5Psm3IPRz7sUzgNp/C1YCRgwfnuCCwdNWynPlcSec 9oyyFEKf0soZ1W9KLtm+IA==; Received: from [130.117.225.5] (helo=dev012.aci.vzint.dev) by relay.virtuozzo.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1x6WpK-00GSrt-1f; Tue, 15 Sep 2026 19:22:53 +0200 From: Vladimir Riabchun To: devel@openvz.org Date: Tue, 15 Sep 2026 17:22:33 +0000 Message-ID: <49cc3ffce4a639e79220ce27f0c6bbfc84681d3b.1789491989.git.vladimir.riabchun@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: References: MIME-Version: 1.0 X-OZ-Fwd: true Subject: [Devel] [PATCH VZ10 v9 5/8] ve/ve.c: Generate VE resource accessors using macros X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org We have a bunch of almost identical code, which takes place and has some unclear variations in it. Unify all resource getters and setters using macros. This changes behavior a little bit: some resources (netns number for example) required stopped VE. Now such limits could be updated with a running VE. Also, some max_nr_write functions didn't verify provided value, now it is not possible to pass overflowing value. https://virtuozzo.atlassian.net/browse/VSTOR-135520 Feature: per-ve failcounters Signed-off-by: Vladimir Riabchun --- kernel/ve/ve.c | 209 +++++++++++++------------------------------------ 1 file changed, 54 insertions(+), 155 deletions(-) diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c index a33e55991e52..5ebdb4b7baa7 100644 --- a/kernel/ve/ve.c +++ b/kernel/ve/ve.c @@ -43,6 +43,39 @@ #include /* For css_tg() */ #include "../sched/sched.h" /* For css_tg() */ +#define VE_RESOURCE(name) \ +static u64 ve_##name##_max_nr_read(struct cgroup_subsys_state *css, \ + struct cftype *cft) \ +{ \ + return css_to_ve(css)->name##_max_nr; \ +} \ + \ +static int ve_##name##_max_nr_write(struct cgroup_subsys_state *css, \ + struct cftype *cft, u64 val) \ +{ \ + struct ve_struct *ve = css_to_ve(css); \ + int delta; \ + \ + if (!ve_is_super(get_exec_env())) \ + return -EPERM; \ + \ + if (val > INT_MAX) \ + return -EOVERFLOW; \ + \ + down_write(&ve->op_sem); \ + delta = val - ve->name##_max_nr; \ + ve->name##_max_nr = val; \ + atomic_add(delta, &ve->name##_avail_nr); \ + up_write(&ve->op_sem); \ + return 0; \ +} \ + \ +static s64 ve_##name##_avail_nr_read(struct cgroup_subsys_state *css, \ + struct cftype *cft) \ +{ \ + return atomic_read(&css_to_ve(css)->name##_avail_nr); \ +} + extern struct kmapset_set sysfs_ve_perms_set; #ifdef CONFIG_PROC_FS extern struct kmapset_set proc_ve_perms_set; @@ -1036,121 +1069,10 @@ static int ve_features_write(struct cgroup_subsys_state *css, struct cftype *cft return 0; } -static u64 ve_netns_max_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return css_to_ve(css)->netns_max_nr; -} - -static int ve_netns_max_nr_write(struct cgroup_subsys_state *css, struct cftype *cft, u64 val) -{ - struct ve_struct *ve = css_to_ve(css); - int delta; - - if (!ve_is_super(get_exec_env())) - return -EPERM; - - down_write(&ve->op_sem); - if (VE_IS_RUNNING(ve) || ve->ve_nsproxy) { - up_write(&ve->op_sem); - return -EBUSY; - } - delta = val - ve->netns_max_nr; - ve->netns_max_nr = val; - atomic_add(delta, &ve->netns_avail_nr); - up_write(&ve->op_sem); - return 0; -} -static u64 ve_netns_avail_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return atomic_read(&css_to_ve(css)->netns_avail_nr); -} - -static s64 ve_mnt_avail_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return atomic_read(&css_to_ve(css)->mnt_avail_nr); -} - -static u64 ve_mnt_max_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return css_to_ve(css)->mnt_max_nr; -} - -static int ve_mnt_max_nr_write(struct cgroup_subsys_state *css, struct cftype *cft, u64 val) -{ - struct ve_struct *ve = css_to_ve(css); - int delta; - - if (!ve_is_super(get_exec_env())) - return -EPERM; - - if (val > INT_MAX) - return -EOVERFLOW; - - down_write(&ve->op_sem); - delta = val - ve->mnt_max_nr; - ve->mnt_max_nr = val; - atomic_add(delta, &ve->mnt_avail_nr); - up_write(&ve->op_sem); - return 0; -} - -static u64 ve_netif_max_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return css_to_ve(css)->netif_max_nr; -} - -static int ve_netif_max_nr_write(struct cgroup_subsys_state *css, struct cftype *cft, u64 val) -{ - struct ve_struct *ve = css_to_ve(css); - int delta; - - if (!ve_is_super(get_exec_env())) - return -EPERM; - - if (val > INT_MAX) - return -EOVERFLOW; - - down_write(&ve->op_sem); - delta = val - ve->netif_max_nr; - ve->netif_max_nr = val; - atomic_add(delta, &ve->netif_avail_nr); - up_write(&ve->op_sem); - return 0; -} - -static s64 ve_netif_avail_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return atomic_read(&css_to_ve(css)->netif_avail_nr); -} - -static u64 ve_bpf_prog_max_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return css_to_ve(css)->bpf_prog_max_nr; -} - -static int ve_bpf_prog_max_nr_write(struct cgroup_subsys_state *css, struct cftype *cft, u64 val) -{ - struct ve_struct *ve = css_to_ve(css); - int delta; - - if (!ve_is_super(get_exec_env())) - return -EPERM; - - if (val > INT_MAX) - return -EOVERFLOW; - - down_write(&ve->op_sem); - delta = val - ve->bpf_prog_max_nr; - ve->bpf_prog_max_nr = val; - atomic_add(delta, &ve->bpf_prog_avail_nr); - up_write(&ve->op_sem); - return 0; -} - -static s64 ve_bpf_prog_avail_nr_read(struct cgroup_subsys_state *css, struct cftype *cft) -{ - return atomic_read(&css_to_ve(css)->bpf_prog_avail_nr); -} +VE_RESOURCE(netns); +VE_RESOURCE(mnt); +VE_RESOURCE(netif); +VE_RESOURCE(bpf_prog); static int ve_os_release_read(struct seq_file *sf, void *v) { @@ -1598,6 +1520,19 @@ static int ve_rpc_kill_write(struct cgroup_subsys_state *css, return 0; } +/* checkpatch will report it, can't enclose this in parentheses. */ +#define VE_RESOURCE_CFTYPE(res) \ +{ \ + .name = #res "_max_nr", \ + .flags = CFTYPE_NOT_ON_ROOT, \ + .read_u64 = ve_##res##_max_nr_read, \ + .write_u64 = ve_##res##_max_nr_write, \ +}, \ +{ \ + .name = #res "_avail_nr", \ + .read_s64 = ve_##res##_avail_nr_read, \ +} + static struct cftype ve_cftypes[] = { { @@ -1642,46 +1577,10 @@ static struct cftype ve_cftypes[] = { .read_u64 = ve_pid_max_read_u64, .write_u64 = ve_pid_max_write_running_u64, }, - { - .name = "netns_max_nr", - .flags = CFTYPE_NOT_ON_ROOT, - .read_u64 = ve_netns_max_nr_read, - .write_u64 = ve_netns_max_nr_write, - }, - { - .name = "netns_avail_nr", - .read_u64 = ve_netns_avail_nr_read, - }, - { - .name = "mnt_avail_nr", - .read_s64 = ve_mnt_avail_nr_read, - }, - { - .name = "mnt_max_nr", - .flags = CFTYPE_NOT_ON_ROOT, - .read_u64 = ve_mnt_max_nr_read, - .write_u64 = ve_mnt_max_nr_write, - }, - { - .name = "netif_max_nr", - .flags = CFTYPE_NOT_ON_ROOT, - .read_u64 = ve_netif_max_nr_read, - .write_u64 = ve_netif_max_nr_write, - }, - { - .name = "netif_avail_nr", - .read_s64 = ve_netif_avail_nr_read, - }, - { - .name = "bpf_prog_max_nr", - .flags = CFTYPE_NOT_ON_ROOT, - .read_u64 = ve_bpf_prog_max_nr_read, - .write_u64 = ve_bpf_prog_max_nr_write, - }, - { - .name = "bpf_prog_avail_nr", - .read_s64 = ve_bpf_prog_avail_nr_read, - }, + VE_RESOURCE_CFTYPE(netns), + VE_RESOURCE_CFTYPE(mnt), + VE_RESOURCE_CFTYPE(netif), + VE_RESOURCE_CFTYPE(bpf_prog), { .name = "os_release", .max_write_len = __NEW_UTS_LEN + 1, -- 2.47.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel