• Chuck Lever's avatar
    xprtrdma: Try to fail quickly if proto=rdma · 52d28fe4
    Chuck Lever authored
    rdma_resolve_addr(3) says:
    
    > This call is used to map a given destination IP address to a
    > usable RDMA address. The IP to RDMA address mapping is done
    > using the local routing tables, or via ARP.
    
    If this can't be done, there's no local device that can be used
    to establish an RDMA-capable network path to the remote. In this
    case, the RDMA CM very quickly posts an RDMA_CM_EVENT_ADDR_ERROR
    upcall.
    
    Currently rpcrdma_conn_upcall() converts RDMA_CM_EVENT_ADDR_ERROR
    to EHOSTUNREACH. mount.nfs seems to want to retry EHOSTUNREACH
    forever, thinking that this is a temporary situation. This makes
    mount.nfs appear to hang if I try to mount with proto=rdma through,
    say, a conventional Ethernet device.
    
    If the admin has specified proto=rdma along with a server IP address
    that requires a network path that does not support RDMA, instead
    let's fail with a permanent error. -EPROTONOSUPPORT is returned when
    NFSv4 or one of its minor versions is not supported.
    
    -EPROTO is not (currently) retried by mount.nfs.
    
    There are potentially other similar cases where -EPROTO is an
    appropriate return code.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Tested-by: default avatarOlga Kornievskaia <kolga@netapp.com>
    Tested-by: default avatarAnna Schumaker <Anna.Schumaker@netapp.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    52d28fe4
verbs.c 40.6 KB