scsi: iscsi: Allow iscsi_if_stop_conn() to be called from kernel
authorMike Christie <michael.christie@oracle.com>
Thu, 16 Jun 2022 22:27:34 +0000 (17:27 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:23:44 +0000 (14:23 +0200)
[ Upstream commit 3328333b47f4163504267440ec0a36087a407a5f ]

iscsi_if_stop_conn() is only called from the userspace interface but in a
subsequent commit we will want to call it from the kernel interface to
allow drivers like qedi to remove sessions from inside the kernel during
shutdown. This removes the iscsi_uevent code from iscsi_if_stop_conn() so we
can call it in a new helper.

Link: https://lore.kernel.org/r/20220616222738.5722-3-michael.christie@oracle.com
Tested-by: Nilesh Javali <njavali@marvell.com>
Reviewed-by: Nilesh Javali <njavali@marvell.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/scsi_transport_iscsi.c

index 5947b9d..671a03b 100644 (file)
@@ -2283,16 +2283,8 @@ static void iscsi_if_disconnect_bound_ep(struct iscsi_cls_conn *conn,
        }
 }
 
-static int iscsi_if_stop_conn(struct iscsi_transport *transport,
-                             struct iscsi_uevent *ev)
+static int iscsi_if_stop_conn(struct iscsi_cls_conn *conn, int flag)
 {
-       int flag = ev->u.stop_conn.flag;
-       struct iscsi_cls_conn *conn;
-
-       conn = iscsi_conn_lookup(ev->u.stop_conn.sid, ev->u.stop_conn.cid);
-       if (!conn)
-               return -EINVAL;
-
        ISCSI_DBG_TRANS_CONN(conn, "iscsi if conn stop.\n");
        /*
         * If this is a termination we have to call stop_conn with that flag
@@ -3739,7 +3731,12 @@ static int iscsi_if_transport_conn(struct iscsi_transport *transport,
        case ISCSI_UEVENT_DESTROY_CONN:
                return iscsi_if_destroy_conn(transport, ev);
        case ISCSI_UEVENT_STOP_CONN:
-               return iscsi_if_stop_conn(transport, ev);
+               conn = iscsi_conn_lookup(ev->u.stop_conn.sid,
+                                        ev->u.stop_conn.cid);
+               if (!conn)
+                       return -EINVAL;
+
+               return iscsi_if_stop_conn(conn, ev->u.stop_conn.flag);
        }
 
        /*