Skip to content

RDMA/siw: Always consume all skbuf data in sk_data_ready() upcall.

Kamal Heib requested to merge kheib/centos-stream-9:bz2131780 into main

Bugzilla: https://bugzilla.redhat.com/2131780

commit 754209850df8367c954ac1de7671c7430b1f342c
Author: Bernard Metzler bmt@zurich.ibm.com
Date: Tue Sep 20 10:12:02 2022 +0200

RDMA/siw: Always consume all skbuf data in sk_data_ready() upcall.  

For header and trailer/padding processing, siw did not consume new  
skb data until minimum amount present to fill current header or trailer  
structure, including potential payload padding. Not consuming any  
data during upcall may cause a receive stall, since tcp_read_sock()  
is not upcalling again if no new data arrive.  
A NFSoRDMA client got stuck at RDMA Write reception of unaligned  
payload, if the current skb did contain only the expected 3 padding  
bytes, but not the 4 bytes CRC trailer. Expecting 4 more bytes already  
arrived in another skb, and not consuming those 3 bytes in the current  
upcall left the Write incomplete, waiting for the CRC forever.  

Fixes: 8b6a361b8c48 ("rdma/siw: receive path")  
Reported-by: Olga Kornievskaia <kolga@netapp.com>  
Tested-by: Olga Kornievskaia <kolga@netapp.com>  
Signed-off-by: Bernard Metzler <bmt@zurich.ibm.com>  
Link: https://lore.kernel.org/r/20220920081202.223629-1-bmt@zurich.ibm.com  
Signed-off-by: Leon Romanovsky <leon@kernel.org>  

Signed-off-by: Kamal Heib kheib@redhat.com

Merge request reports