Re: [PATCH net v2 1/4] ipv4: no CHECKSUM_PARTIAL on MSG_MORE corked sockets
On Tue, Oct 27, 2015, at 17:04, Tom Herbert wrote: > On Tue, Oct 27, 2015 at 8:02 AM, Hannes Frederic Sowa >wrote: > > We cannot reliable calculate packet size on MSG_MORE corked sockets > > and thus cannot decide if they are going to be fragmented later on, > > so better not use CHECKSUM_PARTIAL in the first place. > > > MSG_MORE should be independent of checksum offload. If packet is > fragmented the fix in ip_output will ensure that skb_checksum_help is > properly called. The probability is that we are going to fragment if MSG_MORE is set, because exceeding link mtu is quite probable, see e.g. NFS use case. Why not simply use the csum functions during copy-in in that case? It makes much more sense to me. I don't see a reason to test for fragment length at all, then. Bye, Hannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH net v2 1/4] ipv4: no CHECKSUM_PARTIAL on MSG_MORE corked sockets
We cannot reliable calculate packet size on MSG_MORE corked sockets and thus cannot decide if they are going to be fragmented later on, so better not use CHECKSUM_PARTIAL in the first place. Cc: Eric DumazetCc: Vlad Yasevich Cc: Benjamin Coddington Cc: Tom Herbert Signed-off-by: Hannes Frederic Sowa --- net/ipv4/ip_output.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 50e2973..0b02417 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -911,6 +911,7 @@ static int __ip_append_data(struct sock *sk, if (transhdrlen && length + fragheaderlen <= mtu && rt->dst.dev->features & NETIF_F_V4_CSUM && + !(flags & MSG_MORE) && !exthdrlen) csummode = CHECKSUM_PARTIAL; -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net v2 1/4] ipv4: no CHECKSUM_PARTIAL on MSG_MORE corked sockets
On Tue, Oct 27, 2015 at 9:34 AM, Hannes Frederic Sowawrote: > On Tue, Oct 27, 2015, at 17:04, Tom Herbert wrote: >> On Tue, Oct 27, 2015 at 8:02 AM, Hannes Frederic Sowa >> wrote: >> > We cannot reliable calculate packet size on MSG_MORE corked sockets >> > and thus cannot decide if they are going to be fragmented later on, >> > so better not use CHECKSUM_PARTIAL in the first place. >> > >> MSG_MORE should be independent of checksum offload. If packet is >> fragmented the fix in ip_output will ensure that skb_checksum_help is >> properly called. > > The probability is that we are going to fragment if MSG_MORE is set, > because exceeding link mtu is quite probable, see e.g. NFS use case. Why > not simply use the csum functions during copy-in in that case? It makes > much more sense to me. > For datagram sockets MSG_MORE means that more datagrams will be sent, it's not used to incrementally add data to a datagram already queued (SEQPACKET with EOR is for that). > I don't see a reason to test for fragment length at all, then. > > Bye, > Hannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net v2 1/4] ipv4: no CHECKSUM_PARTIAL on MSG_MORE corked sockets
On Tue, Oct 27, 2015 at 8:02 AM, Hannes Frederic Sowawrote: > We cannot reliable calculate packet size on MSG_MORE corked sockets > and thus cannot decide if they are going to be fragmented later on, > so better not use CHECKSUM_PARTIAL in the first place. > MSG_MORE should be independent of checksum offload. If packet is fragmented the fix in ip_output will ensure that skb_checksum_help is properly called. > Cc: Eric Dumazet > Cc: Vlad Yasevich > Cc: Benjamin Coddington > Cc: Tom Herbert > Signed-off-by: Hannes Frederic Sowa > --- > net/ipv4/ip_output.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c > index 50e2973..0b02417 100644 > --- a/net/ipv4/ip_output.c > +++ b/net/ipv4/ip_output.c > @@ -911,6 +911,7 @@ static int __ip_append_data(struct sock *sk, > if (transhdrlen && > length + fragheaderlen <= mtu && > rt->dst.dev->features & NETIF_F_V4_CSUM && > + !(flags & MSG_MORE) && > !exthdrlen) > csummode = CHECKSUM_PARTIAL; > > -- > 2.5.0 > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html