Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[cascardo/linux.git] / drivers / net / tun.c
index 2c9e45f..a746616 100644 (file)
@@ -622,8 +622,9 @@ static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filte
 
        /* Re-attach the filter to persist device */
        if (!skip_filter && (tun->filter_attached == true)) {
-               err = __sk_attach_filter(&tun->fprog, tfile->socket.sk,
-                                        lockdep_rtnl_is_held());
+               lock_sock(tfile->socket.sk);
+               err = sk_attach_filter(&tun->fprog, tfile->socket.sk);
+               release_sock(tfile->socket.sk);
                if (!err)
                        goto out;
        }
@@ -861,7 +862,8 @@ static netdev_tx_t tun_net_xmit(struct sk_buff *skb, struct net_device *dev)
                goto drop;
 
        if (skb->sk && sk_fullsock(skb->sk)) {
-               sock_tx_timestamp(skb->sk, &skb_shinfo(skb)->tx_flags);
+               sock_tx_timestamp(skb->sk, skb->sk->sk_tsflags,
+                                 &skb_shinfo(skb)->tx_flags);
                sw_tx_timestamp(skb);
        }
 
@@ -1823,7 +1825,9 @@ static void tun_detach_filter(struct tun_struct *tun, int n)
 
        for (i = 0; i < n; i++) {
                tfile = rtnl_dereference(tun->tfiles[i]);
-               __sk_detach_filter(tfile->socket.sk, lockdep_rtnl_is_held());
+               lock_sock(tfile->socket.sk);
+               sk_detach_filter(tfile->socket.sk);
+               release_sock(tfile->socket.sk);
        }
 
        tun->filter_attached = false;
@@ -1836,8 +1840,9 @@ static int tun_attach_filter(struct tun_struct *tun)
 
        for (i = 0; i < tun->numqueues; i++) {
                tfile = rtnl_dereference(tun->tfiles[i]);
-               ret = __sk_attach_filter(&tun->fprog, tfile->socket.sk,
-                                        lockdep_rtnl_is_held());
+               lock_sock(tfile->socket.sk);
+               ret = sk_attach_filter(&tun->fprog, tfile->socket.sk);
+               release_sock(tfile->socket.sk);
                if (ret) {
                        tun_detach_filter(tun, i);
                        return ret;