@@ -1083,29 +1083,39 @@ static struct file_operations proc_venetstat_v6_operations = {
.release = seq_release,
};
+/* TODO: Use tc_lock? */
+static DEFINE_MUTEX(ve_stat_mutex);
+
static int __net_init net_init_acct(struct net *net)
{
struct ve_struct *ve = net->owner_ve;
+ int ret = 0;
+ mutex_lock(&ve_stat_mutex);
if (!ve->stat) {
ve->stat = venet_acct_find_create_stat(ve->veid);
- if (!ve->stat)
- return -ENOMEM;
+ if (!ve->stat) {
+ ret = -ENOMEM;
+ goto out;
+ }
} else
venet_acct_get_stat(ve->stat);
-
- return 0;
+ mutex_unlock(&ve_stat_mutex);
+out:
+ return ret;
}
static void __net_exit net_exit_acct(struct net *net)
{
struct ve_struct *ve = net->owner_ve;
+ mutex_lock(&ve_stat_mutex);
if (ve->stat) {
venet_acct_put_stat(ve->stat);
if (ve->ve_netns == net)
ve->stat = NULL;
}
+ mutex_unlock(&ve_stat_mutex);
}
static struct pernet_operations __net_initdata net_acct_ops = {
The commit is pushed to "branch-rh7-3.10.0-1127.8.2.vz7.161.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-1127.8.2.vz7.161.3 ------> commit dc1b4d39ca367654791635b0c685818c2105dedc Author: Kirill Tkhai <ktkhai@virtuozzo.com> Date: Wed May 27 21:35:01 2020 +0300 ve: Synchronize vznetstat pernet_operations Make impossible parallel init/exit Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> ===================== Patchset description: Parallel per-net init/exit https://jira.sw.ru/browse/PSBM-104158 --- kernel/ve/vznetstat/vznetstat.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)