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 6A7858015A for ; Wed, 9 Sep 2026 21:37:19 +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 689La3nW024090; Thu, 10 Sep 2026 00:36:04 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 689La3nW024090 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="FxWN4CGt" Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 689LZhXn024034 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Thu, 10 Sep 2026 00:35:43 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 689LZhXn024034 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-482e2541c30so149214f8f.1 for ; Wed, 09 Sep 2026 14:35:43 -0700 (PDT) X-Gm-Message-State: AFuF++ntYVnG9xgVwRKrLbwd1jDoaU39lYvPO0kep+M6A8JsGOPoa0GT OwWJvGsS4WQ2teKBkAqdbxJkMX9spsV/fW7il+jZ7frFC0Wfh5gOBMEoitz9R2Wl65IuVNA4RI9 O1FYFpsEHCp5mV+/6dj5S+kDMCcjH2hZjLmfLFu0k8M1t4i43y3Khng== X-Gm-Gg: AYBFou3lj3Yr5O4LdUQJTem6WhiCf/1tp60jr3cdBic9AZKtfSzeL/JPmR8xfcxezDn Pe/4Byz8MlWaphcp1K6//AoBmkfWK1+LxLnZEbmKeObGookIJeY/8dAZmt9fmpyfOAnvqRZ3Vnw /hhd3TVNQWKSn63vBdR4tX75oCnSY11JvrfdVNlKvY9Y1RpQRKFqvrqa8bK6evZPkTjMcJgN2De OfzEBp70kS3pV04bTqXQshDqGA683BBXZ+wpxqfsl9gqk2QNpcJfPXGZAz2vnz/KYXG++u8nCq5 mOEMQM+i1mEbv+nZUIFQL72f+XgCRvuFvI205/CasSNc/cJRei5rj1//moNsx3fnGpXijYd3NmY c68GyLUPkfqzFcMlhzhPJD/xyfFdQ X-Received: by 2002:a05:6000:4914:b0:482:dd86:348 with SMTP id ffacd0b85a97d-486e0f0bd9dmr1394985f8f.4.1788989743270; Wed, 09 Sep 2026 14:35:43 -0700 (PDT) X-Received: by 2002:a05:6000:4914:b0:482:dd86:348 with SMTP id ffacd0b85a97d-486e0f0bd9dmr1394964f8f.4.1788989742787; Wed, 09 Sep 2026 14:35:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788989742; cv=none; d=google.com; s=arc-20260327; b=Z9qs8fQC/cRx/iIc/dR2cPyasrYnrmhTbMFSQg7+2fps1Vf10SREutOefyYGWh6aNg g5HExeqGbZCzV5lxCydlj7xohhr72Zs8xlszCgqPm/a/k2w27w+KeZEAFK6ywZMQVoJv X26BUjay9xEHeZK+VChtEE06W8zC8EsuE2uYGqng17/B06pyQlmoNvl2w24QK9J+v884 nSHv7bojMhxBr6Z4uP5ZJb2p3mWr1mCLUWit0TdHGc8V/RJkDd7sQDJdT3JmOBBFL+8g uvx6kGQRGYikK0nw5lxQOGEa9A/PBkf1B/qfRck1Qc9JCdG0arDc0zyorDv4LadBpKnK Xe3w== 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=GrpAWrz/GzaKlfXqKBHe85hr65QQXZ4XtXCdWx1Q8y+J6sJBZHsjrLRDkqXUWFeS+P NLahNjMAiL2Sl3WW50yicl0rSAb++4wNgXclAUmH7Yp+MWT7MvR8wQQpYuc1Xj1T7nio B0Y1ZD4Vd5/bcnfkwcVk0cX8THzXlexRUYEjyKtFHGZvGH9M4ebh3ttkYrb6NRBeB7zv FSJjwdvPwAqFR7I7qsJDlPVZAc77R5AO+OjbuvI0R/qV2gtavMb0CaF6vjWf8Il2MAnv LcX692vpv/8zkgMbli33KjqAOxw9qBfpMFDBPwefe6/mqlEfWvbALlSHTnJhCkrGU0Yr GFoA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=FxWN4CGt; 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-4858d98b9a4si32705148f8f.205.2026.09.09.14.35.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Sep 2026 14:35:42 -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=FxWN4CGt; 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=FxWN4CGtBxdp 2BN5n9szI23dVaCCwXRJ+tTeR/kopMphuc9dMRSey3pcCdYDbhEsdw1AOjDmt34+vKPKKHD8FowzD wdsS+0Vaui+VoazsuGiWnaPGBiBspjt7h2SsYdnDrWS/qHKBBLjzCVeON0Afj9lbKlwjfptj8XpRg hOj2C7HIkBpp+SHvyyjDTFTqBA3qlqPg5eorORLavdspD3nv1q/gnc8GLDsI2BWJZzYpkeJePk0y/ NcnRsDvLP0vVBUVVqlC5mUXgP9OOhwpcaL85ufBdVdPTT/ivtDn1KL5eaNbdiuf1Kdl0cWqGVgBmA 3Jzk4DNNomWa4fw3ucU2lA==; 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 1x4Pug-00DVmc-0f; Wed, 09 Sep 2026 23:35:41 +0200 From: Vladimir Riabchun To: devel@openvz.org Date: Wed, 9 Sep 2026 21:35:27 +0000 Message-ID: <49cc3ffce4a639e79220ce27f0c6bbfc84681d3b.1788989664.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 v8 5/7] 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