diff options
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r-- | net/ipv6/udp.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 92bf9033e245..39e3665d9460 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -919,6 +919,7 @@ int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
919 | int ulen = len; | 919 | int ulen = len; |
920 | int hlimit = -1; | 920 | int hlimit = -1; |
921 | int tclass = -1; | 921 | int tclass = -1; |
922 | int dontfrag = -1; | ||
922 | int corkreq = up->corkflag || msg->msg_flags&MSG_MORE; | 923 | int corkreq = up->corkflag || msg->msg_flags&MSG_MORE; |
923 | int err; | 924 | int err; |
924 | int connected = 0; | 925 | int connected = 0; |
@@ -1049,7 +1050,8 @@ do_udp_sendmsg: | |||
1049 | memset(opt, 0, sizeof(struct ipv6_txoptions)); | 1050 | memset(opt, 0, sizeof(struct ipv6_txoptions)); |
1050 | opt->tot_len = sizeof(*opt); | 1051 | opt->tot_len = sizeof(*opt); |
1051 | 1052 | ||
1052 | err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, &tclass); | 1053 | err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, |
1054 | &tclass, &dontfrag); | ||
1053 | if (err < 0) { | 1055 | if (err < 0) { |
1054 | fl6_sock_release(flowlabel); | 1056 | fl6_sock_release(flowlabel); |
1055 | return err; | 1057 | return err; |
@@ -1120,6 +1122,9 @@ do_udp_sendmsg: | |||
1120 | if (tclass < 0) | 1122 | if (tclass < 0) |
1121 | tclass = np->tclass; | 1123 | tclass = np->tclass; |
1122 | 1124 | ||
1125 | if (dontfrag < 0) | ||
1126 | dontfrag = np->dontfrag; | ||
1127 | |||
1123 | if (msg->msg_flags&MSG_CONFIRM) | 1128 | if (msg->msg_flags&MSG_CONFIRM) |
1124 | goto do_confirm; | 1129 | goto do_confirm; |
1125 | back_from_confirm: | 1130 | back_from_confirm: |
@@ -1143,7 +1148,7 @@ do_append_data: | |||
1143 | err = ip6_append_data(sk, getfrag, msg->msg_iov, ulen, | 1148 | err = ip6_append_data(sk, getfrag, msg->msg_iov, ulen, |
1144 | sizeof(struct udphdr), hlimit, tclass, opt, &fl, | 1149 | sizeof(struct udphdr), hlimit, tclass, opt, &fl, |
1145 | (struct rt6_info*)dst, | 1150 | (struct rt6_info*)dst, |
1146 | corkreq ? msg->msg_flags|MSG_MORE : msg->msg_flags); | 1151 | corkreq ? msg->msg_flags|MSG_MORE : msg->msg_flags, dontfrag); |
1147 | if (err) | 1152 | if (err) |
1148 | udp_v6_flush_pending_frames(sk); | 1153 | udp_v6_flush_pending_frames(sk); |
1149 | else if (!corkreq) | 1154 | else if (!corkreq) |