[Devel] [PATCH rh7 v2] ve/kobj: Send events per VE instead of all net-namespaces broadcasting

Konstantin Khorenko khorenko at virtuozzo.com
Fri Jun 5 04:49:31 PDT 2015


Andrey, please finish the review.

--
Best regards,

Konstantin Khorenko,
Virtuozzo Linux Kernel Team

On 06/03/2015 10:24 PM, Cyrill Gorcunov wrote:
> Currently uevents are sending broadcastly to all net-namespaces present
> in the system which is leading to problem of C/R'ing systemd based
> containers (netlink socket sees data from the node and we can't dump
> until the data is read). So lets send events broadcastly not per
> net-namespace but per-VE.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at virtuozzo.com>
> CC: Andrey Vagin <avagin at virtuozzo.com>
> CC: Vladimir Davydov <vdavydov at virtuozzo.com>
> CC: Konstantin Khorenko <khorenko at virtuozzo.com>
> CC: Pavel Emelyanov <xemul at virtuozzo.com>
> ---
>  lib/kobject_uevent.c     |    4 ++++
>  net/core/net_namespace.c |    3 +++
>  2 files changed, 7 insertions(+)
> 
> Index: linux-pcs7.git/lib/kobject_uevent.c
> ===================================================================
> --- linux-pcs7.git.orig/lib/kobject_uevent.c
> +++ linux-pcs7.git/lib/kobject_uevent.c
> @@ -27,6 +27,7 @@
>  #include <net/sock.h>
>  #include <net/net_namespace.h>
>  
> +#include <linux/ve.h>
>  
>  u64 uevent_seqnum;
>  char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
> @@ -262,6 +263,9 @@ int kobject_uevent_env_one(struct kobjec
>  		if (!netlink_has_listeners(uevent_sock, 1))
>  			continue;
>  
> +		if (sock_net(uevent_sock)->owner_ve != get_exec_env())
> +			continue;
> +
>  		/* allocate message with the maximum possible size */
>  		len = strlen(action_string) + strlen(devpath) + 2;
>  		skb = alloc_skb(len + env->buflen, GFP_KERNEL);
> Index: linux-pcs7.git/net/core/net_namespace.c
> ===================================================================
> --- linux-pcs7.git.orig/net/core/net_namespace.c
> +++ linux-pcs7.git/net/core/net_namespace.c
> @@ -33,6 +33,9 @@ EXPORT_SYMBOL_GPL(net_namespace_list);
>  
>  struct net init_net = {
>  	.dev_base_head = LIST_HEAD_INIT(init_net.dev_base_head),
> +#ifdef CONFIG_VE
> +	.owner_ve = &ve0,
> +#endif
>  };
>  EXPORT_SYMBOL(init_net);
>  
> _______________________________________________
> Devel mailing list
> Devel at openvz.org
> https://lists.openvz.org/mailman/listinfo/devel
> 



More information about the Devel mailing list