]> Pileus Git - ~andy/linux/blobdiff - net/ipv6/ping.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide
[~andy/linux] / net / ipv6 / ping.c
index 2b52046e12632e25d9e64e1d2ffb199ea8fb6331..18f19df4189f19734564b5fcfbd46ec22b67a1e8 100644 (file)
@@ -174,6 +174,7 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        if (hlimit < 0)
                hlimit = ip6_dst_hoplimit(dst);
 
+       lock_sock(sk);
        err = ip6_append_data(sk, ping_getfrag, &pfh, len,
                              0, hlimit,
                              np->tclass, NULL, &fl6, rt,
@@ -188,8 +189,12 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                                                 (struct icmp6hdr *) &pfh.icmph,
                                                 len);
        }
+       release_sock(sk);
 
-       return err;
+       if (err)
+               return err;
+
+       return len;
 }
 
 #ifdef CONFIG_PROC_FS