xprtrdma: Prevent infinite loop in rpcrdma_ep_create()
If a provider advertizes a zero max_fast_reg_page_list_len, FRWR
depth detection loops forever. Instead of just failing the mount,
try other memory registration modes.
Fixes: 0fc6c4e7bb ("xprtrdma: mind the device's max fast . . .")
Reported-by: Devesh Sharma <Devesh.Sharma@Emulex.Com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Devesh Sharma <Devesh.Sharma@Emulex.Com>
Tested-by: Meghana Cheripady <Meghana.Cheripady@Emulex.Com>
Tested-by: Veeresh U. Kokatnur <veereshuk@chelsio.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
			
			
This commit is contained in:
		
							parent
							
								
									805272406a
								
							
						
					
					
						commit
						41f9702896
					
				| @ -618,9 +618,10 @@ rpcrdma_ia_open(struct rpcrdma_xprt *xprt, struct sockaddr *addr, int memreg) | ||||
| 
 | ||||
| 	if (memreg == RPCRDMA_FRMR) { | ||||
| 		/* Requires both frmr reg and local dma lkey */ | ||||
| 		if ((devattr->device_cap_flags & | ||||
| 		if (((devattr->device_cap_flags & | ||||
| 		     (IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) != | ||||
| 		    (IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) { | ||||
| 		    (IB_DEVICE_MEM_MGT_EXTENSIONS|IB_DEVICE_LOCAL_DMA_LKEY)) || | ||||
| 		      (devattr->max_fast_reg_page_list_len == 0)) { | ||||
| 			dprintk("RPC:       %s: FRMR registration " | ||||
| 				"not supported by HCA\n", __func__); | ||||
| 			memreg = RPCRDMA_MTHCAFMR; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user