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 A55B78015B for ; Fri, 25 Sep 2026 16:55:08 +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 68PGrwuO027420; Fri, 25 Sep 2026 19:53:59 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68PGrwuO027420 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="qhbdYITU" Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 68PGrcUU027350 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 25 Sep 2026 19:53:38 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 68PGrcUU027350 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49e65bee41aso8127005e9.0 for ; Fri, 25 Sep 2026 09:53:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBzyYUQgE0Tw3e833Ax3WGzAsV7bD0vTzKb8KlFSMRiRJdv1LbsnLFyTIh7hqEE/XnIz7gFEgw==@openvz.org X-Gm-Message-State: AFuF++l3dzK0fR8GbDm8PhPRCvBCaB5vmcwrF+FxCc9WTJV0jMFvZAOz EMKS5+lMfwKyF9HalxQW6qfrSh3c954yV8Mg0Y1k6ngFUoC/V4xrkZC/5YTaCoQp0nqrhhmVQI2 usRD8wjqZfur+B95PSh9Dp8FJ9Q1LhwyWPn6A7xBDq6UfW8ytOS6CTw== X-Gm-Gg: AYBFou3Ca7ohj1/lBCmBuGNcaRSqaSnOGrZHJAJYI0qo/qDRX0XMVaGJ8xiO5pfN6JV Z9qM3xx2WN0F+OhiQW0nk14qglBZFAuk1tGNWyukV8QUkMzpUuKJGy+izHH6PqFzQK917/qypeQ 2N79r2eUbs1YoADB/01r0xMLoytIgmVUTKH3DhhRruJMV3M7oB6gHgfa0KZFNLDdz3N6ekTjEPF yhucNVzfS3bBZE9tgmYrv733FgWwk2uNQ4NvLyLtAv34Xsce7ANVf9dGN/hkaXx335ZVMc6ABFX Z+Pn87cGoB5Rz+EjQE5wcuZLemY6v0oxCzL8VEKBCFrVdFshdYjOa9u0NGx7C+55rZYBt5w6RSi J/B7K7rsCevcKIpvU3A== X-Received: by 2002:a05:600c:c3db:20b0:49e:686e:5822 with SMTP id 5b1f17b1804b1-49fe66fa5d9mr93615805e9.13.1790355217950; Fri, 25 Sep 2026 09:53:37 -0700 (PDT) X-Received: by 2002:a05:600c:c3db:20b0:49e:686e:5822 with SMTP id 5b1f17b1804b1-49fe66fa5d9mr93615455e9.13.1790355217396; Fri, 25 Sep 2026 09:53:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1790355217; cv=none; d=google.com; s=arc-20260327; b=g6kPLUfgOyaS9dl/sxW0TI0+1iCqy1CscYfilFd50fM1wX6f0qt3dWY9vyY3MYr/k5 cDu/5dxynizLAM4tWCcqQnLfficPu6bmSOCSo5ASFq3c9yYKvwMC/CHva3Eh65zvN4DF ghfAt5qPrkpkS5/VmNHJfJYJf5Xl7DAyrj52YCOOD7Z/mP3S3ReDs0NWcbjADBz1mx6F Z3EMdzta6AhmW5aEqBLHzF04bLYM7xDbLr+TwRHI3zzd5C1BU2fh1f5NQ44zpwOQmCdH y9mmfC6vewJsn3aNzpJPntHgnpinD+S603iPHO03X7mVm2M+51vbxBQCVSjEpdWYJHjf tztA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:dkim-signature; bh=V2G6d7TuR3A2jNlBinKSScYc/Ph5ZKgu0libfBjo0jE=; fh=zK/v/gHQ7GavWYhLJT8+SASJ7h8osfxqNHUzmzGkT+o=; b=iUl1/L9octD0ZB5SaaqbePc3pZe2Ia29pKtH3/cgF+BNz2eakOF7cDDVOCRhZ3J7uE vZqLXN3AEHTqbRv+GFCPkxhsDK/+eIxvSqHJ3ufvbz4l/ukwZHsBt5/LTtfOwjaDiKAj ekjvooiQILZLusAiULy1ihfpAHYQk011XNTb/R77y7n89AY/QiPVetHWaJOEadU7SLxg s0nji2czDvWL60Iijpxjp0yQd3DR8VG6tIZNW7BPSpxDVljaeroq32en+D9cCOKhbEOk yRCQYfKaFQ1Yg5LzSrv9KhdvEv8xg+XuIqxk7nkCGMFwqjQarudNaH5tqNgTb/rnFXJJ NNSQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=qhbdYITU; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@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-4887a856babsi6053583f8f.301.2026.09.25.09.53.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 25 Sep 2026 09:53:37 -0700 (PDT) Received-SPF: pass (google.com: domain of khorenko@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=qhbdYITU; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@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=Message-Id:Content-Type:MIME-Version:Subject:Date :From; bh=V2G6d7TuR3A2jNlBinKSScYc/Ph5ZKgu0libfBjo0jE=; b=qhbdYITUxqwi/ZvakHw YlP7gIvp/8WYfvhw2m+vc3SQkcsM/Njlj6aji85G1cwHbJm2N+NhxfXQPeEKGsXRzQZzpLAtGj1pH o8SRDgdM2KbeC/jtEdv/Jcm/lBi77jfNKSfaBtJt/nOannSE4BstCyQ3BYOEILrecrAe/O1vJT4Tf ypCYXxbQEYz4/5jowME5BI6pRx2NBT3hPb2OzkZDt0yFrD3mmO2+GhIYRCWXpWPIvZjJluRnQsJyJ AerwUJJS17C8Kfui8dTUv0pUXl0J3JyjMrD1fXQxqkjUAaGztOoSP++LOlXw5Otq1wdbFsGe2UpvV zyG3JmMSw2KSPgw==; Received: from ch-demo-asa.virtuozzo.com ([130.117.225.8] helo=f0.sw.ru) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1xA984-00CFkL-2e; Fri, 25 Sep 2026 18:53:33 +0200 From: Konstantin Khorenko Date: Fri, 25 Sep 2026 18:53:26 +0200 MIME-Version: 1.0 Message-Id: <20260925-b4-kh-ve_fail-v10-5-77a6b6ea4205@virtuozzo.com> References: <20260925-b4-kh-ve_fail-v10-0-77a6b6ea4205@virtuozzo.com> In-Reply-To: <20260925-b4-kh-ve_fail-v10-0-77a6b6ea4205@virtuozzo.com> To: Vasileios Almpanis , Pavel Tikhomirov , cover.1789491989.git.vladimir.riabchun@virtuozzo.com, Konstantin Khorenko , devel@openvz.org X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=7480; i=khorenko@virtuozzo.com; h=from:subject:message-id; bh=GcVAXVAI5uD6VbgI8jB0nHmrZfBx6UO2l4DbyNtmJAQ=; b=owEBbQKS/ZANAwAKAVGWCkf5YVwqAcsmYgBqtqcMKdroSy09vTLGoCMGcCh7VVC0MXg2PNCB0 1sBNg5IKdGJAjMEAAEKAB0WIQRWD23IPcXT0GO9CCxRlgpH+WFcKgUCaranDAAKCRBRlgpH+WFc KvZHD/4mH4kONZuNsUikCCfhPGgJya7KeCHtVjvMdgogog53l7F0dOxYoBaojYuae2ETgCjWUBV dQjhDDJPMcyHQXUVFFLOq2BlXCsuIPvS3oh3oMJhAHJaRl9zLdEjle8vUoOmndtrE2InrM4Bpms +DVHf5Zl0KC+GSKOk14b1B0nTNg34049/juZHhP75wa5YDLU9zk9wbWVpkAwm9Cn1Yjg40rL1eG mYFGWL9zXLhsI6vbg3Me9Y92NCiQuP9t3QWXw0Na+NDRE5koG/hz0Rxj++yfUPojqasMCmZELZB yx9yS1qARlO0foeRwEKqQT/+NasGOFvxlaOug8AJLVAzuDgIWKQBaS7GILNU0bVHaQhrDl4Qd8r cnmlV/lCli8hXAWTotXjJCNsH+QEaxAl79Qra1vE3l7dO6CM/P7r8kxlbCU2ONoZjvf2bBb4AoV b7E0tlL9XqzAW5ZbvA+sySRaVyJlb/Wq6PcqJpcdZIRq8i+hINQNC3EBBktXCdDeDfDAh/dyrdc HO76T/AqJ14QOjMR5+UJ7wLqMqxfVHgdf4DYcPa4/PpSAmOaH9n7m3XBTuiWphh53mjNjK69KIS +FzEBITjLZqYP6Eg+eFCEqX2K8AuNLLJU+Hm5CZUKjU/+s6pFfy/XkLdAv5PhzOBxnN5ceBdJ9o lG7r7YyMnt3enrQ== X-Developer-Key: i=khorenko@virtuozzo.com; a=openpgp; fpr=560F6DC83DC5D3D063BD082C51960A47F9615C2A X-OZ-Fwd: true Subject: [Devel] [PATCH hci-8.1 v10 05/13] 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 From: Vladimir Riabchun 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. netns_avail_nr is now read as s64, like the other avail counters: once the limit can be lowered on a running VE, the value can go negative. https://virtuozzo.atlassian.net/browse/VSTOR-135520 Feature: per-ve failcounters Signed-off-by: Vladimir Riabchun Reviewed-by: Konstantin Khorenko --- 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 c113071540bf4..d7546cd5fffaa 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.43.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel