In order to do a proper reconnect we need to know if we're a swapper.
Only the session context can tell us that.

(This patch breaks the NETLINK_ISCSI ABI, userspace also needs a change)

Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]>
CC: Mike Christie <[EMAIL PROTECTED]>
---
 drivers/infiniband/ulp/iser/iscsi_iser.c |    3 ++-
 drivers/scsi/iscsi_tcp.c                 |    3 ++-
 drivers/scsi/scsi_transport_iscsi.c      |    4 +++-
 include/scsi/iscsi_if.h                  |    1 +
 include/scsi/scsi_transport_iscsi.h      |    3 ++-
 5 files changed, 10 insertions(+), 4 deletions(-)

Index: linux-2.6/drivers/scsi/iscsi_tcp.c
===================================================================
--- linux-2.6.orig/drivers/scsi/iscsi_tcp.c     2006-09-07 19:32:56.000000000 
+0200
+++ linux-2.6/drivers/scsi/iscsi_tcp.c  2006-09-07 19:34:07.000000000 +0200
@@ -1729,7 +1729,8 @@ iscsi_tcp_ctask_xmit(struct iscsi_conn *
 }
 
 static int
-iscsi_tcp_ep_connect(struct sockaddr *dst_addr, int non_blocking,
+iscsi_tcp_ep_connect(struct iscsi_cls_session *cls_session,
+                    struct sockaddr *dst_addr, int non_blocking,
                     uint64_t *ep_handle)
 {
        struct socket *sock;
Index: linux-2.6/drivers/scsi/scsi_transport_iscsi.c
===================================================================
--- linux-2.6.orig/drivers/scsi/scsi_transport_iscsi.c  2006-09-07 
19:32:37.000000000 +0200
+++ linux-2.6/drivers/scsi/scsi_transport_iscsi.c       2006-09-07 
19:34:07.000000000 +0200
@@ -914,6 +914,7 @@ iscsi_if_transport_ep(struct iscsi_trans
                      struct iscsi_uevent *ev, int msg_type)
 {
        struct sockaddr *dst_addr;
+       struct iscsi_cls_session *session;
        int rc = 0;
 
        switch (msg_type) {
@@ -922,7 +923,8 @@ iscsi_if_transport_ep(struct iscsi_trans
                        return -EINVAL;
 
                dst_addr = (struct sockaddr *)((char*)ev + sizeof(*ev));
-               rc = transport->ep_connect(dst_addr,
+               session = iscsi_session_lookup(ev->u.ep_connect.sid);
+               rc = transport->ep_connect(session, dst_addr,
                                           ev->u.ep_connect.non_blocking,
                                           &ev->r.ep_connect_ret.handle);
                break;
Index: linux-2.6/include/scsi/iscsi_if.h
===================================================================
--- linux-2.6.orig/include/scsi/iscsi_if.h      2006-09-07 19:32:37.000000000 
+0200
+++ linux-2.6/include/scsi/iscsi_if.h   2006-09-07 19:34:07.000000000 +0200
@@ -117,6 +117,7 @@ struct iscsi_uevent {
                } get_stats;
                struct msg_transport_connect {
                        uint32_t        non_blocking;
+                       uint32_t        sid;
                } ep_connect;
                struct msg_transport_poll {
                        uint64_t        ep_handle;
Index: linux-2.6/include/scsi/scsi_transport_iscsi.h
===================================================================
--- linux-2.6.orig/include/scsi/scsi_transport_iscsi.h  2006-09-07 
19:32:37.000000000 +0200
+++ linux-2.6/include/scsi/scsi_transport_iscsi.h       2006-09-07 
19:34:07.000000000 +0200
@@ -120,7 +120,8 @@ struct iscsi_transport {
        int (*xmit_mgmt_task) (struct iscsi_conn *conn,
                               struct iscsi_mgmt_task *mtask);
        void (*session_recovery_timedout) (struct iscsi_cls_session *session);
-       int (*ep_connect) (struct sockaddr *dst_addr, int non_blocking,
+       int (*ep_connect) (struct iscsi_cls_session *session,
+                          struct sockaddr *dst_addr, int non_blocking,
                           uint64_t *ep_handle);
        int (*ep_poll) (uint64_t ep_handle, int timeout_ms);
        void (*ep_disconnect) (uint64_t ep_handle);
Index: linux-2.6/drivers/infiniband/ulp/iser/iscsi_iser.c
===================================================================
--- linux-2.6.orig/drivers/infiniband/ulp/iser/iscsi_iser.c     2006-09-07 
19:32:37.000000000 +0200
+++ linux-2.6/drivers/infiniband/ulp/iser/iscsi_iser.c  2006-09-07 
19:34:07.000000000 +0200
@@ -490,7 +490,8 @@ iscsi_iser_conn_get_stats(struct iscsi_c
 }
 
 static int
-iscsi_iser_ep_connect(struct sockaddr *dst_addr, int non_blocking,
+iscsi_iser_ep_connect(struct iscsi_cls_session *cls_session,
+                     struct sockaddr *dst_addr, int non_blocking,
                      __u64 *ep_handle)
 {
        int err;

--

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to