diff options
author | David S. Miller <davem@davemloft.net> | 2008-06-04 12:10:21 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-06-04 12:10:21 -0700 |
commit | aed5a833fb18123d7cfc6ce3810ab97efd4869b3 (patch) | |
tree | 7077b2dce8fe2990cdf10ef8e1990c1eeafd3bc1 /net/ipv6/udp.c | |
parent | a6604471db5e7a33474a7f16c64d6b118fae3e74 (diff) | |
parent | 9596cc826e2e52bfc318ca37a6c52fe3d72990a3 (diff) | |
download | kernel_samsung_crespo-aed5a833fb18123d7cfc6ce3810ab97efd4869b3.zip kernel_samsung_crespo-aed5a833fb18123d7cfc6ce3810ab97efd4869b3.tar.gz kernel_samsung_crespo-aed5a833fb18123d7cfc6ce3810ab97efd4869b3.tar.bz2 |
Merge branch 'net-2.6-misc-20080605a' of git://git.linux-ipv6.org/gitroot/yoshfuji/linux-2.6-fix
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r-- | net/ipv6/udp.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 1fd784f..dd30962 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -534,7 +534,9 @@ static void udp_v6_flush_pending_frames(struct sock *sk) { struct udp_sock *up = udp_sk(sk); - if (up->pending) { + if (up->pending == AF_INET) + udp_flush_pending_frames(sk); + else if (up->pending) { up->len = 0; up->pending = 0; ip6_flush_pending_frames(sk); @@ -731,7 +733,7 @@ do_udp_sendmsg: memset(opt, 0, sizeof(struct ipv6_txoptions)); opt->tot_len = sizeof(*opt); - err = datagram_send_ctl(msg, &fl, opt, &hlimit, &tclass); + err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, &tclass); if (err < 0) { fl6_sock_release(flowlabel); return err; @@ -848,12 +850,14 @@ do_append_data: } else { dst_release(dst); } + dst = NULL; } if (err > 0) err = np->recverr ? net_xmit_errno(err) : 0; release_sock(sk); out: + dst_release(dst); fl6_sock_release(flowlabel); if (!err) return len; |