Patch "rpcrdma: fix handling for RDMA_CM_EVENT_DEVICE_REMOVAL" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    rpcrdma: fix handling for RDMA_CM_EVENT_DEVICE_REMOVAL

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rpcrdma-fix-handling-for-rdma_cm_event_device_remova.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 95dc804381b56efa7f0143fdfe00ac485977767f
Author: Dan Aloni <dan.aloni@xxxxxxxxxxxx>
Date:   Mon May 6 12:37:59 2024 +0300

    rpcrdma: fix handling for RDMA_CM_EVENT_DEVICE_REMOVAL
    
    [ Upstream commit 4836da219781ec510c4c0303df901aa643507a7a ]
    
    Under the scenario of IB device bonding, when bringing down one of the
    ports, or all ports, we saw xprtrdma entering a non-recoverable state
    where it is not even possible to complete the disconnect and shut it
    down the mount, requiring a reboot. Following debug, we saw that
    transport connect never ended after receiving the
    RDMA_CM_EVENT_DEVICE_REMOVAL callback.
    
    The DEVICE_REMOVAL callback is irrespective of whether the CM_ID is
    connected, and ESTABLISHED may not have happened. So need to work with
    each of these states accordingly.
    
    Fixes: 2acc5cae2923 ('xprtrdma: Prevent dereferencing r_xprt->rx_ep after it is freed')
    Cc: Sagi Grimberg <sagi.grimberg@xxxxxxxxxxxx>
    Signed-off-by: Dan Aloni <dan.aloni@xxxxxxxxxxxx>
    Reviewed-by: Sagi Grimberg <sagi@xxxxxxxxxxx>
    Reviewed-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
    Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
index d015576f3081a..9e9df38b29f74 100644
--- a/net/sunrpc/xprtrdma/verbs.c
+++ b/net/sunrpc/xprtrdma/verbs.c
@@ -268,7 +268,11 @@ rpcrdma_cm_event_handler(struct rdma_cm_id *id, struct rdma_cm_event *event)
 	case RDMA_CM_EVENT_DEVICE_REMOVAL:
 		pr_info("rpcrdma: removing device %s for %pISpc\n",
 			ep->re_id->device->name, sap);
-		fallthrough;
+		switch (xchg(&ep->re_connect_status, -ENODEV)) {
+		case 0: goto wake_connect_worker;
+		case 1: goto disconnected;
+		}
+		return 0;
 	case RDMA_CM_EVENT_ADDR_CHANGE:
 		ep->re_connect_status = -ENODEV;
 		goto disconnected;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux