• Chuck Lever's avatar
    xprtrdma: Support unplugging an HCA from under an NFS mount · bebd0318
    Chuck Lever authored
    The device driver for the underlying physical device associated
    with an RPC-over-RDMA transport can be removed while RPC-over-RDMA
    transports are still in use (ie, while NFS filesystems are still
    mounted and active). The IB core performs a connection event upcall
    to request that consumers free all RDMA resources associated with
    a transport.
    
    There may be pending RPCs when this occurs. Care must be taken to
    release associated resources without leaving references that can
    trigger a subsequent crash if a signal or soft timeout occurs. We
    rely on the caller of the transport's ->close method to ensure that
    the previous RPC task has invoked xprt_release but the transport
    remains write-locked.
    
    A DEVICE_REMOVE upcall forces a disconnect then sleeps. When ->close
    is invoked, it destroys the transport's H/W resources, then wakes
    the upcall, which completes and allows the core driver unload to
    continue.
    
    BugLink: https://bugzilla.linux-nfs.org/show_bug.cgi?id=266Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    bebd0318
verbs.c 36.3 KB