Re: [PATCH net v2 1/4] ipv4: no CHECKSUM_PARTIAL on MSG_MORE corked sockets

2015-10-27 Thread Hannes Frederic Sowa
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

2015-10-27 Thread Hannes Frederic Sowa
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 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


Re: [PATCH net v2 1/4] ipv4: no CHECKSUM_PARTIAL on MSG_MORE corked sockets

2015-10-27 Thread Tom Herbert
On Tue, Oct 27, 2015 at 9:34 AM, Hannes Frederic Sowa
 wrote:
> 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

2015-10-27 Thread Tom Herbert
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.

> 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