On Wed, Apr 22, 2015 at 11:09 AM, Pravin Shelar <pshe...@nicira.com> wrote:
> On Wed, Apr 22, 2015 at 10:52 AM, Jesse Gross <je...@nicira.com> wrote:
>> On Wed, Apr 22, 2015 at 10:03 AM, Pravin Shelar <pshe...@nicira.com> wrote:
>>> On Mon, Apr 20, 2015 at 9:54 PM, Jesse Gross <je...@nicira.com> wrote:
>>>> On Mon, Apr 20, 2015 at 7:33 PM, Pravin Shelar <pshe...@nicira.com> wrote:
>>>>> On Mon, Apr 20, 2015 at 5:56 PM, Jesse Gross <je...@nicira.com> wrote:
>>>>>> On Mon, Apr 20, 2015 at 3:54 PM, Pravin Shelar <pshe...@nicira.com> 
>>>>>> wrote:
>>>>>>> On Mon, Apr 20, 2015 at 3:36 PM, Jesse Gross <je...@nicira.com> wrote:
>>>>>>>> On Mon, Apr 20, 2015 at 1:29 PM, Pravin B Shelar <pshe...@nicira.com> 
>>>>>>>> wrote:
>>>>>>>>> diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c
>>>>>>>>> new file mode 100644
>>>>>>>>> index 0000000..209bf1a
>>>>>>>>> --- /dev/null
>>>>>>>>> +++ b/datapath/linux/compat/stt.c
>>>>>>>>> +static void update_headers(struct sk_buff *skb, bool head,
>>>>>>>>> +                              unsigned int l4_offset, unsigned int 
>>>>>>>>> hdr_len,
>>>>>>>>> +                              bool ipv4, u32 tcp_seq)
>>>>>>>> [...]
>>>>>>>>> +       skb->truesize = SKB_TRUESIZE(skb_end_offset(skb)) + 
>>>>>>>>> skb->data_len;
>>>>>>>>> +}
>>>>>>>>
>>>>>>>> I wonder if there are any possible edge cases with resetting truesize
>>>>>>>> where the packet is still in someone's transmit queue (such as if we
>>>>>>>> are looping back packet). Do we need to orphan it first?
>>>>>>>>
>>>>>>> ok, I will orphan it in update_headers.
>>>>>>
>>>>>> Just to clarify - I was mostly just thinking aloud on orphaning it.
>>>>>> I'm not totally sure if that is the right thing to do or if this is
>>>>>> the right place to do it. I'm not sure what the conceptual
>>>>>> justification would be for it and it could potentially result in the
>>>>>> sender's buffers not being properly limited. Perhaps not resetting the
>>>>>> truesize is the right thing too...
>>>>>>
>>>>> I have seen warning msg if we do no keep truesize update along with
>>>>> changes to skb.
>>>>
>>>> Hmm, interesting, what is the warning? I don't think that I have seen
>>>> that before.
>>>
>>> Actually skb_try_coalesce() is updating it correctly. so there no need
>>> to change truesize anymore. I will update patch accordingly.
>>
>> That's much nicer. I also checked and other receive side code (like
>> TCP input) doesn't worry about the case where a local sender may still
>> be accounting for the packet since any type of loopback device does
>> call skb_orphan() in some form.
>>
>> I hate to bring this up but what about on transmit? In cases where we
>> merge or split skbs (skb_try_coalesce() and normalize_frag_list()
>> respectively) we do track the truesize for correctly for the result
>> but the individual pieces might not have the right destructors or
>> might not have their truesize updated for the destructor they do have.
>
> How about about we update merged skb stats (len, data_len, truesize)
> according to *delta_truesize we get from skb_try_coalesce() and then
> free the skb?

I think that would work for the skb_try_coalesce() case (although I
would only worry about truesize, not the lengths). For
normalize_frag_list() I think we would either have to add a destructor
or not update truesize. I'm not sure that the condition where we have
frag_lists and a destructor actually ever happens in practice though.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to