From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yunsheng Lin Subject: [QUESTION] Doubt about NAPI_GRO_CB(skb)->is_atomic in tcpv4 gro process Date: Wed, 20 Dec 2017 17:09:40 +0800 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Cc: , "davem@davemloft.net" , "linuxarm@huawei.com" , , , Xuehuahu To: "netdev@vger.kernel.org" Return-path: Received: from szxga07-in.huawei.com ([45.249.212.35]:40689 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1753474AbdLTJJw (ORCPT ); Wed, 20 Dec 2017 04:09:52 -0500 Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: Hi, all I have some doubt about NAPI_GRO_CB(skb)->is_atomic when analyzing the tcpv4 gro process: Firstly we set NAPI_GRO_CB(skb)->is_atomic to 1 in dev_gro_receive: https://elixir.free-electrons.com/linux/v4.15-rc4/source/net/core/dev.c#L4838 And then in inet_gro_receive, we check the NAPI_GRO_CB(skb)->is_atomic before setting NAPI_GRO_CB(skb)->is_atomic according to IP_DF bit in the ip header: https://elixir.free-electrons.com/linux/v4.15-rc4/source/net/ipv4/af_inet.c#L1319 struct sk_buff **inet_gro_receive(struct sk_buff **head, struct sk_buff *skb) { ..................... for (p = *head; p; p = p->next) { ........................ /* If the previous IP ID value was based on an atomic * datagram we can overwrite the value and ignore it. */ if (NAPI_GRO_CB(skb)->is_atomic) //we check it here NAPI_GRO_CB(p)->flush_id = flush_id; else NAPI_GRO_CB(p)->flush_id |= flush_id; } NAPI_GRO_CB(skb)->is_atomic = !!(iph->frag_off & htons(IP_DF)); //we set it here NAPI_GRO_CB(skb)->flush |= flush; skb_set_network_header(skb, off); ................................ } My question is whether we should check the NAPI_GRO_CB(skb)->is_atomic or NAPI_GRO_CB(p)->is_atomic? If we should check NAPI_GRO_CB(skb)->is_atomic, then maybe it is unnecessary because it is alway true. If we should check NAPI_GRO_CB(p)->is_atomic, maybe there is a bug here. So what is the logic here? I am just start analyzing the gro, maybe I miss something obvious here.