diff options
Diffstat (limited to 'drivers/net/tun.c')
-rw-r--r-- | drivers/net/tun.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index afdf950617c3..2c9e45f50edb 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c | |||
@@ -622,7 +622,8 @@ static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filte | |||
622 | 622 | ||
623 | /* Re-attach the filter to persist device */ | 623 | /* Re-attach the filter to persist device */ |
624 | if (!skip_filter && (tun->filter_attached == true)) { | 624 | if (!skip_filter && (tun->filter_attached == true)) { |
625 | err = sk_attach_filter(&tun->fprog, tfile->socket.sk); | 625 | err = __sk_attach_filter(&tun->fprog, tfile->socket.sk, |
626 | lockdep_rtnl_is_held()); | ||
626 | if (!err) | 627 | if (!err) |
627 | goto out; | 628 | goto out; |
628 | } | 629 | } |
@@ -1014,7 +1015,6 @@ static void tun_net_init(struct net_device *dev) | |||
1014 | /* Zero header length */ | 1015 | /* Zero header length */ |
1015 | dev->type = ARPHRD_NONE; | 1016 | dev->type = ARPHRD_NONE; |
1016 | dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; | 1017 | dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; |
1017 | dev->tx_queue_len = TUN_READQ_SIZE; /* We prefer our own queue length */ | ||
1018 | break; | 1018 | break; |
1019 | 1019 | ||
1020 | case IFF_TAP: | 1020 | case IFF_TAP: |
@@ -1026,7 +1026,6 @@ static void tun_net_init(struct net_device *dev) | |||
1026 | 1026 | ||
1027 | eth_hw_addr_random(dev); | 1027 | eth_hw_addr_random(dev); |
1028 | 1028 | ||
1029 | dev->tx_queue_len = TUN_READQ_SIZE; /* We prefer our own queue length */ | ||
1030 | break; | 1029 | break; |
1031 | } | 1030 | } |
1032 | } | 1031 | } |
@@ -1480,6 +1479,8 @@ static void tun_setup(struct net_device *dev) | |||
1480 | 1479 | ||
1481 | dev->ethtool_ops = &tun_ethtool_ops; | 1480 | dev->ethtool_ops = &tun_ethtool_ops; |
1482 | dev->destructor = tun_free_netdev; | 1481 | dev->destructor = tun_free_netdev; |
1482 | /* We prefer our own queue length */ | ||
1483 | dev->tx_queue_len = TUN_READQ_SIZE; | ||
1483 | } | 1484 | } |
1484 | 1485 | ||
1485 | /* Trivial set of netlink ops to allow deleting tun or tap | 1486 | /* Trivial set of netlink ops to allow deleting tun or tap |
@@ -1822,7 +1823,7 @@ static void tun_detach_filter(struct tun_struct *tun, int n) | |||
1822 | 1823 | ||
1823 | for (i = 0; i < n; i++) { | 1824 | for (i = 0; i < n; i++) { |
1824 | tfile = rtnl_dereference(tun->tfiles[i]); | 1825 | tfile = rtnl_dereference(tun->tfiles[i]); |
1825 | sk_detach_filter(tfile->socket.sk); | 1826 | __sk_detach_filter(tfile->socket.sk, lockdep_rtnl_is_held()); |
1826 | } | 1827 | } |
1827 | 1828 | ||
1828 | tun->filter_attached = false; | 1829 | tun->filter_attached = false; |
@@ -1835,7 +1836,8 @@ static int tun_attach_filter(struct tun_struct *tun) | |||
1835 | 1836 | ||
1836 | for (i = 0; i < tun->numqueues; i++) { | 1837 | for (i = 0; i < tun->numqueues; i++) { |
1837 | tfile = rtnl_dereference(tun->tfiles[i]); | 1838 | tfile = rtnl_dereference(tun->tfiles[i]); |
1838 | ret = sk_attach_filter(&tun->fprog, tfile->socket.sk); | 1839 | ret = __sk_attach_filter(&tun->fprog, tfile->socket.sk, |
1840 | lockdep_rtnl_is_held()); | ||
1839 | if (ret) { | 1841 | if (ret) { |
1840 | tun_detach_filter(tun, i); | 1842 | tun_detach_filter(tun, i); |
1841 | return ret; | 1843 | return ret; |