The commit is pushed to "branch-rh7-3.10.0-327.10.1.vz7.12.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-327.10.1.vz7.12.3 ------> commit a8a54004b07a4930ebf03dda33a0ec1188ed2376 Author: Pavel Tikhomirov <ptikhomi...@virtuozzo.com> Date: Thu Mar 24 19:53:44 2016 +0400
vzprivnet: rt cache drop on vzprivnet update changes: 1) fix rt_cache_flush arguments Below commit removes arg delay from rt_cache_flush: commit bafa6d9d8907 ("ipv4/route: arg delay is useless in rt_cache_flush()") Port diff-vzprivnet-rt-cache-drop-on-vzprivnet-update rt cache drop on vzprivnet update Vzprivnet update does not flushes rt cache inside containers. If entry was cached before update, vzprivnet changes can have no effect during quite long time. This patch flushes rt cache inside all containers after privnet changes. It guarantees that all newly created entries will have correct privnet_mark. https://jira.sw.ru/browse/PSBM-28881 Signed-off-by: Vasily Averin <v...@parallels.com> Signed-off-by: Pavel Tikhomirov <ptikhomi...@virtuozzo.com> --- net/ipv4/netfilter/ip_vzprivnet.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/net/ipv4/netfilter/ip_vzprivnet.c b/net/ipv4/netfilter/ip_vzprivnet.c index efe0d95..258d12c 100644 --- a/net/ipv4/netfilter/ip_vzprivnet.c +++ b/net/ipv4/netfilter/ip_vzprivnet.c @@ -480,6 +480,7 @@ static int parse_param(const char *param, int *add, u32 *net, static ssize_t vzpriv_write(struct file * file, const char __user *buf, size_t count, loff_t *ppos) { + struct net *net; char *s, *page; int err; int offset; @@ -495,8 +496,6 @@ static ssize_t vzpriv_write(struct file * file, const char __user *buf, if (err) goto err; - rt_cache_flush(&init_net); - s = page; s[count] = 0; @@ -520,6 +519,11 @@ static ssize_t vzpriv_write(struct file * file, const char __user *buf, s = nextline(s); } out: + rtnl_lock(); + for_each_net(net) + rt_cache_flush(net); + rtnl_unlock(); + offset = s - page; if (offset > 0) err = offset; @@ -815,6 +819,7 @@ static int parse_sparse(const char *param, int *add, static ssize_t sparse_write(struct file * file, const char __user *buf, size_t count, loff_t *ppos) { + struct net *net; char *s, *page; int err; int offset; @@ -830,8 +835,6 @@ static ssize_t sparse_write(struct file * file, const char __user *buf, if (err) goto err; - rt_cache_flush(&init_net); - s = page; s[count] = 0; @@ -856,6 +859,11 @@ static ssize_t sparse_write(struct file * file, const char __user *buf, s = nextline(s); } out: + rtnl_lock(); + for_each_net(net) + rt_cache_flush(net); + rtnl_unlock(); + offset = s - page; if (offset > 0) err = offset; _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel