• Sagi Grimberg's avatar
    nvme-rdma: fix timeout handler · 4c174e63
    Sagi Grimberg authored
    Currently, we have several problems with the timeout
    handler:
    1. If we timeout on the controller establishment flow, we will hang
    because we don't execute the error recovery (and we shouldn't because
    the create_ctrl flow needs to fail and cleanup on its own)
    2. We might also hang if we get a disconnet on a queue while the
    controller is already deleting. This racy flow can cause the controller
    disable/shutdown admin command to hang.
    
    We cannot complete a timed out request from the timeout handler without
    mutual exclusion from the teardown flow (e.g. nvme_rdma_error_recovery_work).
    So we serialize it in the timeout handler and teardown io and admin
    queues to guarantee that no one races with us from completing the
    request.
    Reported-by: default avatarJaesoo Lee <jalee@purestorage.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    4c174e63
rdma.c 52.7 KB