• Bob Pearson's avatar
    RDMA/rxe: Fix deadlock in rxe_do_local_ops() · 7cb33d1b
    Bob Pearson authored
    When a local operation (invalidate mr, reg mr, bind mw) is finished there
    will be no ack packet coming from a responder to cause the wqe to be
    completed. This may happen anyway if a subsequent wqe performs
    IO. Currently if the wqe is signalled the completer tasklet is scheduled
    immediately but not otherwise.
    
    This leads to a deadlock if the next wqe has the fence bit set in send
    flags and the operation is not signalled. This patch removes the condition
    that the wqe must be signalled in order to schedule the completer tasklet
    which is the simplest fix for this deadlock and is fairly low cost. This
    is the analog for local operations of always setting the ackreq bit in all
    last or only request packets even if the operation is not signalled.
    
    Link: https://lore.kernel.org/r/20220523223251.15350-1-rpearsonhpe@gmail.comReported-by: default avatarJenny Hack <jhack@hpe.com>
    Fixes: c1a41126 ("RDMA/rxe: Move local ops to subroutine")
    Signed-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    7cb33d1b
rxe_req.c 18 KB