Message ID | 20180313194141.12913-1-doshir@vmware.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net,1/2] vmxnet3: avoid xmit reset due to a race in vmxnet3 | expand |
From: Ronak Doshi <doshir@vmware.com> Date: Tue, 13 Mar 2018 12:41:41 -0700 > 'Commit 45dac1d6ea04 ("vmxnet3: Changes for vmxnet3 adapter version 2 > (fwd)")' introduced a flag "lro" in structure vmxnet3_adapter which is > used to indicate whether LRO is enabled or not. However, the patch > did not set the flag and hence it was never exercised. > > So, when LRO is enabled, it resulted in poor TCP performance due to > delayed acks. This issue is seen with packets which are larger than > the mss getting a delayed ack rather than an immediate ack, thus > resulting in high latency. > > This patch removes the lro flag and directly uses device features > against NETIF_F_LRO to check if lro is enabled. > > Reported-by: Rachel Lunnon <rachel_lunnon@stormagic.com> > Signed-off-by: Ronak Doshi <doshir@vmware.com> > Acked-by: Shrikrishna Khare <skhare@vmware.com> Please add an appropriate "Fixes: " tag for the commit which introduced this problem. This helps with -stable submissions and bug fix triage.
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 052eef2f729f..86c4d6e4dfaa 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c @@ -1473,7 +1473,8 @@ vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq, vmxnet3_rx_csum(adapter, skb, (union Vmxnet3_GenericDesc *)rcd); skb->protocol = eth_type_trans(skb, adapter->netdev); - if (!rcd->tcp || !adapter->lro) + if (!rcd->tcp || + !(adapter->netdev->features & NETIF_F_LRO)) goto not_lro; if (segCnt != 0 && mss != 0) { diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h index b94fdfd0b6f1..99387a4a20a8 100644 --- a/drivers/net/vmxnet3/vmxnet3_int.h +++ b/drivers/net/vmxnet3/vmxnet3_int.h @@ -69,10 +69,10 @@ /* * Version numbers */ -#define VMXNET3_DRIVER_VERSION_STRING "1.4.12.0-k" +#define VMXNET3_DRIVER_VERSION_STRING "1.4.13.0-k" /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ -#define VMXNET3_DRIVER_VERSION_NUM 0x01040c00 +#define VMXNET3_DRIVER_VERSION_NUM 0x01040d00 #if defined(CONFIG_PCI_MSI) /* RSS only makes sense if MSI-X is supported. */ @@ -343,7 +343,6 @@ struct vmxnet3_adapter { u8 version; bool rxcsum; - bool lro; #ifdef VMXNET3_RSS struct UPT1_RSSConf *rss_conf;