• Olaf Kirch's avatar
    IB/mthca: Avoid recycling old FMR R_Keys too soon · 0bfe151c
    Olaf Kirch authored
    When a FMR is unmapped, mthca resets the map count to 0, and clears
    the upper part of the R_Key which is used as the sequence counter.
    
    This poses a problem for RDS, which uses ib_fmr_unmap as a fence
    operation.  RDS assumes that after issuing an unmap, the old R_Keys
    will be invalid for a "reasonable" period of time. For instance,
    Oracle processes uses shared memory buffers allocated from a pool of
    buffers.  When a process dies, we want to reclaim these buffers -- but
    we must make sure there are no pending RDMA operations to/from those
    buffers.  The only way to achieve that is by using unmap and sync the
    TPT.
    
    However, when the sequence count is reset on unmap, there is a high
    likelihood that a new mapping will be given the same R_Key that was
    issued a few milliseconds ago.
    
    To prevent this, don't reset the sequence count when unmapping a FMR.
    Signed-off-by: default avatarOlaf Kirch <olaf.kirch@oracle.com>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    0bfe151c
mthca_mr.c 23.4 KB