• Chuck Lever's avatar
    xprtrdma: Add ro_unmap_safe memreg method · ead3f26e
    Chuck Lever authored
    There needs to be a safe method of releasing registered memory
    resources when an RPC terminates. Safe can mean a number of things:
    
    + Doesn't have to sleep
    
    + Doesn't rely on having a QP in RTS
    
    ro_unmap_safe will be that safe method. It can be used in cases
    where synchronous memory invalidation can deadlock, or needs to have
    an active QP.
    
    The important case is fencing an RPC's memory regions after it is
    signaled (^C) and before it exits. If this is not done, there is a
    window where the server can write an RPC reply into memory that the
    client has released and re-used for some other purpose.
    
    Note that this is a full solution for FRWR, but FMR and physical
    still have some gaps where a particularly bad server can wreak
    some havoc on the client. These gaps are not made worse by this
    patch and are expected to be exceptionally rare and timing-based.
    They are noted in documenting comments.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Tested-by: default avatarSteve Wise <swise@opengridcomputing.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    ead3f26e
transport.c 21.6 KB