• Chuck Lever's avatar
    xprtrdma: Add mechanism to place MRs back on the free list · 40088f0e
    Chuck Lever authored
    When a marshal operation fails, any MRs that were already set up for
    that request are recycled. Recycling releases MRs and creates new
    ones, which is expensive.
    
    Since commit f2877623 ("xprtrdma: Chain Send to FastReg WRs")
    was merged, recycling FRWRs is unnecessary. This is because before
    that commit, frwr_map had already posted FAST_REG Work Requests,
    so ownership of the MRs had already been passed to the NIC and thus
    dealing with them had to be delayed until they completed.
    
    Since that commit, however, FAST_REG WRs are posted at the same time
    as the Send WR. This means that if marshaling fails, we are certain
    the MRs are safe to simply unmap and place back on the free list
    because neither the Send nor the FAST_REG WRs have been posted yet.
    The kernel still has ownership of the MRs at this point.
    
    This reduces the total number of MRs that the xprt has to create
    under heavy workloads and makes the marshaling logic less brittle.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    40088f0e
frwr_ops.c 17 KB