From 732129044bd1e0bfab7439011eb2898e772e97b5 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Wed, 16 Apr 2008 00:41:53 -0700 Subject: [PATCH] --- yaml --- r: 90744 b: refs/heads/master c: fc54c65853dbfd2f70ff827b73344f9de4e4b501 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/tun.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 95cf7cdca55e..9a0d0d267b68 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d647a591dae06ccc96210cea938aa0342ef935fc +refs/heads/master: fc54c65853dbfd2f70ff827b73344f9de4e4b501 diff --git a/trunk/drivers/net/tun.c b/trunk/drivers/net/tun.c index 1e655ea63102..d91856b19f6f 100644 --- a/trunk/drivers/net/tun.c +++ b/trunk/drivers/net/tun.c @@ -477,6 +477,7 @@ static void tun_setup(struct net_device *dev) dev->stop = tun_net_close; dev->ethtool_ops = &tun_ethtool_ops; dev->destructor = free_netdev; + dev->features |= NETIF_F_NETNS_LOCAL; } static struct tun_struct *tun_get_by_name(struct tun_net *tn, const char *name) @@ -544,6 +545,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) if (!dev) return -ENOMEM; + dev_net_set(dev, net); tun = netdev_priv(dev); tun->dev = dev; tun->flags = flags; @@ -583,6 +585,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr) file->private_data = tun; tun->attached = 1; + get_net(dev_net(tun->dev)); strcpy(ifr->ifr_name, tun->dev->name); return 0; @@ -798,6 +801,7 @@ static int tun_chr_close(struct inode *inode, struct file *file) /* Detach from net device */ file->private_data = NULL; tun->attached = 0; + put_net(dev_net(tun->dev)); /* Drop read queue */ skb_queue_purge(&tun->readq);