This lets iscsi_tcp operate in multiple namespaces.  It uses current
during session creation to find the net namespace, but it might be
better to manage to pass it along from the iscsi netlink socket.
---
 drivers/infiniband/ulp/iser/iscsi_iser.c |   5 +-
 drivers/scsi/be2iscsi/be_iscsi.c         |   4 +-
 drivers/scsi/bnx2i/bnx2i_iscsi.c         |   4 +-
 drivers/scsi/cxgbi/libcxgbi.c            |   4 +-
 drivers/scsi/iscsi_tcp.c                 |   7 +
 drivers/scsi/qla4xxx/ql4_os.c            |   6 +-
 drivers/scsi/scsi_transport_iscsi.c      | 259 +++++++++++++++++--------------
 include/scsi/scsi_transport_iscsi.h      |   5 +-
 8 files changed, 174 insertions(+), 120 deletions(-)

diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c 
b/drivers/infiniband/ulp/iser/iscsi_iser.c
index 37b33d708c2d..41cad4bd8366 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -465,15 +465,18 @@ iscsi_iser_conn_bind(struct iscsi_cls_session 
*cls_session,
        struct iscsi_conn *conn = cls_conn->dd_data;
        struct iser_conn *iser_conn;
        struct iscsi_endpoint *ep;
+       struct net *net;
        int error;
 
        error = iscsi_conn_bind(cls_session, cls_conn, is_leading);
        if (error)
                return error;
 
+
        /* the transport ep handle comes from user space so it must be
         * verified against the global ib connections list */
-       ep = iscsi_lookup_endpoint(transport_eph);
+       net = iscsi_sess_net(cls_session);
+       ep = iscsi_lookup_endpoint(net, transport_eph);
        if (!ep) {
                iser_err("can't bind eph %llx\n",
                         (unsigned long long)transport_eph);
diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c
index 97dca4681784..8f76d0f95ec4 100644
--- a/drivers/scsi/be2iscsi/be_iscsi.c
+++ b/drivers/scsi/be2iscsi/be_iscsi.c
@@ -181,8 +181,10 @@ int beiscsi_conn_bind(struct iscsi_cls_session 
*cls_session,
        struct beiscsi_endpoint *beiscsi_ep;
        struct iscsi_endpoint *ep;
        uint16_t cri_index;
+       struct net *net;
 
-       ep = iscsi_lookup_endpoint(transport_fd);
+       net = iscsi_sess_net(cls_session);
+       ep = iscsi_lookup_endpoint(net, transport_fd);
        if (!ep)
                return -EINVAL;
 
diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c
index 03c104b47f31..06bd0223c009 100644
--- a/drivers/scsi/bnx2i/bnx2i_iscsi.c
+++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c
@@ -1414,9 +1414,11 @@ static int bnx2i_conn_bind(struct iscsi_cls_session 
*cls_session,
        struct bnx2i_hba *hba = iscsi_host_priv(shost);
        struct bnx2i_endpoint *bnx2i_ep;
        struct iscsi_endpoint *ep;
+       struct net *net;
        int ret_code;
 
-       ep = iscsi_lookup_endpoint(transport_fd);
+       net = iscsi_sess_net(cls_session);
+       ep = iscsi_lookup_endpoint(net, transport_fd);
        if (!ep)
                return -EINVAL;
        /*
diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c
index 1a4cfa562a60..74cb2c7cce32 100644
--- a/drivers/scsi/cxgbi/libcxgbi.c
+++ b/drivers/scsi/cxgbi/libcxgbi.c
@@ -2356,9 +2356,11 @@ int cxgbi_bind_conn(struct iscsi_cls_session 
*cls_session,
        struct iscsi_endpoint *ep;
        struct cxgbi_endpoint *cep;
        struct cxgbi_sock *csk;
+       struct net *net;
        int err;
 
-       ep = iscsi_lookup_endpoint(transport_eph);
+       net = iscsi_sess_net(cls_session);
+       ep = iscsi_lookup_endpoint(net, transport_eph);
        if (!ep)
                return -EINVAL;
 
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index 4842fc0e809d..19c1036a0ad2 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -959,6 +959,11 @@ static int iscsi_sw_tcp_slave_configure(struct scsi_device 
*sdev)
        return 0;
 }
 
+static struct net *iscsi_sw_tcp_netns(struct Scsi_Host *shost)
+{
+       return current->nsproxy->net_ns;
+}
+
 static struct scsi_host_template iscsi_sw_tcp_sht = {
        .module                 = THIS_MODULE,
        .name                   = "iSCSI Initiator over TCP/IP",
@@ -1015,6 +1020,8 @@ static struct iscsi_transport iscsi_sw_tcp_transport = {
        .alloc_pdu              = iscsi_sw_tcp_pdu_alloc,
        /* recovery */
        .session_recovery_timedout = iscsi_session_recovery_timedout,
+       /* net namespace */
+       .get_netns              = iscsi_sw_tcp_netns,
 };
 
 static int __init iscsi_sw_tcp_init(void)
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 64c6fa563fdb..b881634a24a2 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -3178,6 +3178,7 @@ static int qla4xxx_conn_bind(struct iscsi_cls_session 
*cls_session,
        struct ddb_entry *ddb_entry;
        struct scsi_qla_host *ha;
        struct iscsi_session *sess;
+       struct net *net;
 
        sess = cls_session->dd_data;
        ddb_entry = sess->dd_data;
@@ -3186,9 +3187,12 @@ static int qla4xxx_conn_bind(struct iscsi_cls_session 
*cls_session,
        DEBUG2(ql4_printk(KERN_INFO, ha, "%s: sid = %d, cid = %d\n", __func__,
                          cls_session->sid, cls_conn->cid));
 
+       net = iscsi_sess_net(cls_session);
+       ep = iscsi_lookup_endpoint(net, transport_fd);
+       if (!ep)
+               return -EINVAL;
        if (iscsi_conn_bind(cls_session, cls_conn, is_leading))
                return -EINVAL;
-       ep = iscsi_lookup_endpoint(transport_fd);
        conn = cls_conn->dd_data;
        qla_conn = conn->dd_data;
        qla_conn->qla_ep = ep->dd_data;
diff --git a/drivers/scsi/scsi_transport_iscsi.c 
b/drivers/scsi/scsi_transport_iscsi.c
index e129ea0ae8c3..b931e21314ec 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -275,10 +275,11 @@ void iscsi_destroy_endpoint(struct iscsi_endpoint *ep)
 }
 EXPORT_SYMBOL_GPL(iscsi_destroy_endpoint);
 
-struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle)
+struct iscsi_endpoint *iscsi_lookup_endpoint(struct net *net, u64 handle)
 {
        struct iscsi_endpoint *ep;
        struct device *dev;
+       struct net *ns;
 
        dev = class_find_device(&iscsi_endpoint_class, NULL, &handle,
                                iscsi_match_epid);
@@ -286,6 +287,9 @@ struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle)
                return NULL;
 
        ep = iscsi_dev_to_endpoint(dev);
+       ns = iscsi_endpoint_net(ep);
+       if (ns != net)
+               ep = NULL;
        /*
         * we can drop this now because the interface will prevent
         * removals and lookups from racing.
@@ -1601,11 +1605,16 @@ static int iscsi_setup_host(struct transport_container 
*tc, struct device *dev,
 {
        struct Scsi_Host *shost = dev_to_shost(dev);
        struct iscsi_cls_host *ihost = shost->shost_data;
+       struct iscsi_internal *priv = to_iscsi_internal(shost->transportt);
+       struct iscsi_transport *transport = priv->iscsi_transport;
 
        memset(ihost, 0, sizeof(*ihost));
        atomic_set(&ihost->nr_scans, 0);
        mutex_init(&ihost->mutex);
-       ihost->netns = &init_net;
+       if (transport->get_netns)
+               ihost->netns = transport->get_netns(shost);
+       else
+               ihost->netns = &init_net;
 
        iscsi_bsg_host_add(shost, ihost);
        /* ignore any bsg add error - we just can't do sgio */
@@ -1654,13 +1663,14 @@ static DECLARE_TRANSPORT_CLASS_NS(iscsi_host_class,
                                  &net_ns_type_operations,
                                  iscsi_host_namespace);
 
-static struct net *iscsi_sess_net(struct iscsi_cls_session *cls_session)
+struct net *iscsi_sess_net(struct iscsi_cls_session *cls_session)
 {
        struct Scsi_Host *shost = iscsi_session_to_shost(cls_session);
        struct iscsi_cls_host *ihost = shost->shost_data;
 
        return iscsi_host_net(ihost);
 }
+EXPORT_SYMBOL_GPL(iscsi_sess_net);
 
 static const void *iscsi_sess_namespace(struct device *dev)
 {
@@ -1720,14 +1730,18 @@ static uint32_t iscsi_conn_get_sid(struct 
iscsi_cls_conn *conn)
 /*
  * Returns the matching session to a given sid
  */
-static struct iscsi_cls_session *iscsi_session_lookup(uint32_t sid)
+static struct iscsi_cls_session *iscsi_session_lookup(struct net *net, 
uint32_t sid)
 {
        unsigned long flags;
        struct iscsi_cls_session *sess;
+       struct net *ns;
 
        spin_lock_irqsave(&sesslock, flags);
        list_for_each_entry(sess, &sesslist, sess_list) {
                if (sess->sid == sid) {
+                       ns = iscsi_sess_net(sess);
+                       if (ns != net)
+                               continue;
                        spin_unlock_irqrestore(&sesslock, flags);
                        return sess;
                }
@@ -1739,14 +1753,18 @@ static struct iscsi_cls_session 
*iscsi_session_lookup(uint32_t sid)
 /*
  * Returns the matching connection to a given sid / cid tuple
  */
-static struct iscsi_cls_conn *iscsi_conn_lookup(uint32_t sid, uint32_t cid)
+static struct iscsi_cls_conn *iscsi_conn_lookup(struct net *net, uint32_t sid, 
uint32_t cid)
 {
        unsigned long flags;
        struct iscsi_cls_conn *conn;
+       struct net *ns;
 
        spin_lock_irqsave(&connlock, flags);
        list_for_each_entry(conn, &connlist, conn_list) {
                if ((conn->cid == cid) && (iscsi_conn_get_sid(conn) == sid)) {
+                       ns = iscsi_conn_net(conn);
+                       if (ns != net)
+                               continue;
                        spin_unlock_irqrestore(&connlock, flags);
                        return conn;
                }
@@ -2435,7 +2453,7 @@ iscsi_if_transport_lookup(struct iscsi_transport *tt)
 }
 
 static int
-iscsi_multicast_skb(const struct net *net, struct sk_buff *skb,
+iscsi_multicast_skb(struct net *net, struct sk_buff *skb,
                    uint32_t group, gfp_t gfp)
 {
        struct sock *nls;
@@ -2454,7 +2472,7 @@ int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct 
iscsi_hdr *hdr,
        struct iscsi_uevent *ev;
        char *pdu;
        struct iscsi_internal *priv;
-       const struct net *netns;
+       struct net *net;
        int len = nlmsg_total_size(sizeof(*ev) + sizeof(struct iscsi_hdr) +
                                   data_size);
 
@@ -2481,8 +2499,8 @@ int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct 
iscsi_hdr *hdr,
        memcpy(pdu, hdr, sizeof(struct iscsi_hdr));
        memcpy(pdu + sizeof(struct iscsi_hdr), data, data_size);
 
-       netns = iscsi_conn_net(conn);
-       return iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_ISCSID, GFP_ATOMIC);
+       net = iscsi_conn_net(conn);
+       return iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_ISCSID, GFP_ATOMIC);
 }
 EXPORT_SYMBOL_GPL(iscsi_recv_pdu);
 
@@ -2493,7 +2511,7 @@ int iscsi_offload_mesg(struct Scsi_Host *shost,
        struct nlmsghdr *nlh;
        struct sk_buff *skb;
        struct iscsi_uevent *ev;
-       const struct net *netns;
+       struct net *net;
        int len = nlmsg_total_size(sizeof(*ev) + data_size);
 
        skb = alloc_skb(len, GFP_ATOMIC);
@@ -2518,8 +2536,8 @@ int iscsi_offload_mesg(struct Scsi_Host *shost,
 
        memcpy((char *)ev + sizeof(*ev), data, data_size);
 
-       netns = iscsi_host_net(shost->shost_data);
-       return iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_UIP, GFP_ATOMIC);
+       net = iscsi_host_net(shost->shost_data);
+       return iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_UIP, GFP_ATOMIC);
 }
 EXPORT_SYMBOL_GPL(iscsi_offload_mesg);
 
@@ -2529,7 +2547,7 @@ void iscsi_conn_error_event(struct iscsi_cls_conn *conn, 
enum iscsi_err error)
        struct sk_buff  *skb;
        struct iscsi_uevent *ev;
        struct iscsi_internal *priv;
-       const struct net *netns;
+       struct net *net;
        int len = nlmsg_total_size(sizeof(*ev));
 
        priv = iscsi_if_transport_lookup(conn->transport);
@@ -2551,8 +2569,8 @@ void iscsi_conn_error_event(struct iscsi_cls_conn *conn, 
enum iscsi_err error)
        ev->r.connerror.cid = conn->cid;
        ev->r.connerror.sid = iscsi_conn_get_sid(conn);
 
-       netns = iscsi_conn_net(conn);
-       iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_ISCSID, GFP_ATOMIC);
+       net = iscsi_conn_net(conn);
+       iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_ISCSID, GFP_ATOMIC);
 
        iscsi_cls_conn_printk(KERN_INFO, conn, "detected conn error (%d)\n",
                              error);
@@ -2566,7 +2584,7 @@ void iscsi_conn_login_event(struct iscsi_cls_conn *conn,
        struct sk_buff  *skb;
        struct iscsi_uevent *ev;
        struct iscsi_internal *priv;
-       const struct net *netns;
+       struct net *net;
        int len = nlmsg_total_size(sizeof(*ev));
 
        priv = iscsi_if_transport_lookup(conn->transport);
@@ -2588,8 +2606,8 @@ void iscsi_conn_login_event(struct iscsi_cls_conn *conn,
        ev->r.conn_login.cid = conn->cid;
        ev->r.conn_login.sid = iscsi_conn_get_sid(conn);
 
-       netns = iscsi_conn_net(conn);
-       iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_ISCSID, GFP_ATOMIC);
+       net = iscsi_conn_net(conn);
+       iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_ISCSID, GFP_ATOMIC);
 
        iscsi_cls_conn_printk(KERN_INFO, conn, "detected conn login (%d)\n",
                              state);
@@ -2601,7 +2619,7 @@ void iscsi_post_host_event(uint32_t host_no, struct 
iscsi_transport *transport,
                           uint8_t *data)
 {
        struct Scsi_Host *shost;
-       const struct net *netns;
+       struct net *net;
        struct nlmsghdr *nlh;
        struct sk_buff *skb;
        struct iscsi_uevent *ev;
@@ -2629,9 +2647,9 @@ void iscsi_post_host_event(uint32_t host_no, struct 
iscsi_transport *transport,
        if (data_size)
                memcpy((char *)ev + sizeof(*ev), data, data_size);
 
-       netns = iscsi_host_net(shost->shost_data);
+       net = iscsi_host_net(shost->shost_data);
        scsi_host_put(shost);
-       iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_ISCSID, GFP_NOIO);
+       iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_ISCSID, GFP_NOIO);
 }
 EXPORT_SYMBOL_GPL(iscsi_post_host_event);
 
@@ -2640,7 +2658,7 @@ void iscsi_ping_comp_event(uint32_t host_no, struct 
iscsi_transport *transport,
                           uint8_t *data)
 {
        struct Scsi_Host *shost;
-       const struct net *netns;
+       struct net *net;
        struct nlmsghdr *nlh;
        struct sk_buff *skb;
        struct iscsi_uevent *ev;
@@ -2666,14 +2684,14 @@ void iscsi_ping_comp_event(uint32_t host_no, struct 
iscsi_transport *transport,
        ev->r.ping_comp.data_size = data_size;
        memcpy((char *)ev + sizeof(*ev), data, data_size);
 
-       netns = iscsi_host_net(shost->shost_data);
+       net = iscsi_host_net(shost->shost_data);
        scsi_host_put(shost);
-       iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_ISCSID, GFP_NOIO);
+       iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_ISCSID, GFP_NOIO);
 }
 EXPORT_SYMBOL_GPL(iscsi_ping_comp_event);
 
 static int
-iscsi_if_send_reply(const struct net *netns, uint32_t group, int seq, int type,
+iscsi_if_send_reply(struct net *net, uint32_t group, int seq, int type,
                    int done, int multi, void *payload, int size)
 {
        struct sk_buff  *skb;
@@ -2691,11 +2709,11 @@ iscsi_if_send_reply(const struct net *netns, uint32_t 
group, int seq, int type,
        nlh = __nlmsg_put(skb, 0, 0, t, (len - sizeof(*nlh)), 0);
        nlh->nlmsg_flags = flags;
        memcpy(nlmsg_data(nlh), payload, size);
-       return iscsi_multicast_skb(netns, skb, group, GFP_ATOMIC);
+       return iscsi_multicast_skb(net, skb, group, GFP_ATOMIC);
 }
 
 static int
-iscsi_if_get_stats(const struct net *netns, struct iscsi_transport *transport,
+iscsi_if_get_stats(struct net *net, struct iscsi_transport *transport,
                   struct nlmsghdr *nlh)
 {
        struct iscsi_uevent *ev = nlmsg_data(nlh);
@@ -2715,7 +2733,7 @@ iscsi_if_get_stats(const struct net *netns, struct 
iscsi_transport *transport,
        if (!priv)
                return -EINVAL;
 
-       conn = iscsi_conn_lookup(ev->u.get_stats.sid, ev->u.get_stats.cid);
+       conn = iscsi_conn_lookup(net, ev->u.get_stats.sid, ev->u.get_stats.cid);
        if (!conn)
                return -EEXIST;
 
@@ -2753,7 +2771,7 @@ iscsi_if_get_stats(const struct net *netns, struct 
iscsi_transport *transport,
                skb_trim(skbstat, NLMSG_ALIGN(actual_size));
                nlhstat->nlmsg_len = actual_size;
 
-               err = iscsi_multicast_skb(netns, skbstat, ISCSI_NL_GRP_ISCSID,
+               err = iscsi_multicast_skb(net, skbstat, ISCSI_NL_GRP_ISCSID,
                                          GFP_ATOMIC);
        } while (err < 0 && err != -ECONNREFUSED);
 
@@ -2773,7 +2791,7 @@ int iscsi_session_event(struct iscsi_cls_session *session,
        struct iscsi_uevent *ev;
        struct sk_buff  *skb;
        struct nlmsghdr *nlh;
-       const struct net *netns;
+       struct net *net;
        int rc, len = nlmsg_total_size(sizeof(*ev));
 
        priv = iscsi_if_transport_lookup(session->transport);
@@ -2818,8 +2836,8 @@ int iscsi_session_event(struct iscsi_cls_session *session,
         * this will occur if the daemon is not up, so we just warn
         * the user and when the daemon is restarted it will handle it
         */
-       netns = iscsi_sess_net(session);
-       rc = iscsi_multicast_skb(netns, skb, ISCSI_NL_GRP_ISCSID, GFP_KERNEL);
+       net = iscsi_sess_net(session);
+       rc = iscsi_multicast_skb(net, skb, ISCSI_NL_GRP_ISCSID, GFP_KERNEL);
        if (rc == -ESRCH)
                iscsi_cls_session_printk(KERN_ERR, session,
                                         "Cannot notify userspace of session "
@@ -2857,12 +2875,12 @@ iscsi_if_create_session(struct iscsi_internal *priv, 
struct iscsi_endpoint *ep,
 }
 
 static int
-iscsi_if_create_conn(struct iscsi_transport *transport, struct iscsi_uevent 
*ev)
+iscsi_if_create_conn(struct net *net, struct iscsi_transport *transport, 
struct iscsi_uevent *ev)
 {
        struct iscsi_cls_conn *conn;
        struct iscsi_cls_session *session;
 
-       session = iscsi_session_lookup(ev->u.c_conn.sid);
+       session = iscsi_session_lookup(net, ev->u.c_conn.sid);
        if (!session) {
                printk(KERN_ERR "iscsi: invalid session %d.\n",
                       ev->u.c_conn.sid);
@@ -2884,11 +2902,11 @@ iscsi_if_create_conn(struct iscsi_transport *transport, 
struct iscsi_uevent *ev)
 }
 
 static int
-iscsi_if_destroy_conn(struct iscsi_transport *transport, struct iscsi_uevent 
*ev)
+iscsi_if_destroy_conn(struct net *net, struct iscsi_transport *transport, 
struct iscsi_uevent *ev)
 {
        struct iscsi_cls_conn *conn;
 
-       conn = iscsi_conn_lookup(ev->u.d_conn.sid, ev->u.d_conn.cid);
+       conn = iscsi_conn_lookup(net, ev->u.d_conn.sid, ev->u.d_conn.cid);
        if (!conn)
                return -EINVAL;
 
@@ -2900,15 +2918,15 @@ iscsi_if_destroy_conn(struct iscsi_transport 
*transport, struct iscsi_uevent *ev
 }
 
 static int
-iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev)
+iscsi_set_param(struct net *net, struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
 {
        char *data = (char*)ev + sizeof(*ev);
        struct iscsi_cls_conn *conn;
        struct iscsi_cls_session *session;
        int err = 0, value = 0;
 
-       session = iscsi_session_lookup(ev->u.set_param.sid);
-       conn = iscsi_conn_lookup(ev->u.set_param.sid, ev->u.set_param.cid);
+       session = iscsi_session_lookup(net, ev->u.set_param.sid);
+       conn = iscsi_conn_lookup(net, ev->u.set_param.sid, ev->u.set_param.cid);
        if (!conn || !session)
                return -EINVAL;
 
@@ -2926,7 +2944,19 @@ iscsi_set_param(struct iscsi_transport *transport, 
struct iscsi_uevent *ev)
        return err;
 }
 
-static int iscsi_if_ep_connect(struct iscsi_transport *transport,
+static struct Scsi_Host *iscsi_host_lookup(struct net *net, unsigned short 
hostnum)
+{
+       struct Scsi_Host *shost;
+
+       shost = scsi_host_lookup(hostnum);
+       if (shost && iscsi_host_net(shost->shost_data) != net) {
+               scsi_host_put(shost);
+               shost = NULL;
+       }
+       return shost;
+}
+
+static int iscsi_if_ep_connect(struct net *net, struct iscsi_transport 
*transport,
                               struct iscsi_uevent *ev, int msg_type)
 {
        struct iscsi_endpoint *ep;
@@ -2938,7 +2968,7 @@ static int iscsi_if_ep_connect(struct iscsi_transport 
*transport,
                return -EINVAL;
 
        if (msg_type == ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST) {
-               shost = scsi_host_lookup(ev->u.ep_connect_through_host.host_no);
+               shost = iscsi_host_lookup(net, 
ev->u.ep_connect_through_host.host_no);
                if (!shost) {
                        printk(KERN_ERR "ep connect failed. Could not find "
                               "host no %u\n",
@@ -2963,7 +2993,7 @@ static int iscsi_if_ep_connect(struct iscsi_transport 
*transport,
        return err;
 }
 
-static int iscsi_if_ep_disconnect(struct iscsi_transport *transport,
+static int iscsi_if_ep_disconnect(struct net *net, struct iscsi_transport 
*transport,
                                  u64 ep_handle)
 {
        struct iscsi_cls_conn *conn;
@@ -2972,7 +3002,7 @@ static int iscsi_if_ep_disconnect(struct iscsi_transport 
*transport,
        if (!transport->ep_disconnect)
                return -EINVAL;
 
-       ep = iscsi_lookup_endpoint(ep_handle);
+       ep = iscsi_lookup_endpoint(net, ep_handle);
        if (!ep)
                return -EINVAL;
        conn = ep->conn;
@@ -2987,7 +3017,7 @@ static int iscsi_if_ep_disconnect(struct iscsi_transport 
*transport,
 }
 
 static int
-iscsi_if_transport_ep(struct iscsi_transport *transport,
+iscsi_if_transport_ep(struct net *net, struct iscsi_transport *transport,
                      struct iscsi_uevent *ev, int msg_type)
 {
        struct iscsi_endpoint *ep;
@@ -2996,13 +3026,13 @@ iscsi_if_transport_ep(struct iscsi_transport *transport,
        switch (msg_type) {
        case ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST:
        case ISCSI_UEVENT_TRANSPORT_EP_CONNECT:
-               rc = iscsi_if_ep_connect(transport, ev, msg_type);
+               rc = iscsi_if_ep_connect(net, transport, ev, msg_type);
                break;
        case ISCSI_UEVENT_TRANSPORT_EP_POLL:
                if (!transport->ep_poll)
                        return -EINVAL;
 
-               ep = iscsi_lookup_endpoint(ev->u.ep_poll.ep_handle);
+               ep = iscsi_lookup_endpoint(net, ev->u.ep_poll.ep_handle);
                if (!ep)
                        return -EINVAL;
 
@@ -3010,7 +3040,7 @@ iscsi_if_transport_ep(struct iscsi_transport *transport,
                                                   ev->u.ep_poll.timeout_ms);
                break;
        case ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT:
-               rc = iscsi_if_ep_disconnect(transport,
+               rc = iscsi_if_ep_disconnect(net, transport,
                                            ev->u.ep_disconnect.ep_handle);
                break;
        }
@@ -3018,7 +3048,7 @@ iscsi_if_transport_ep(struct iscsi_transport *transport,
 }
 
 static int
-iscsi_tgt_dscvr(struct iscsi_transport *transport,
+iscsi_tgt_dscvr(struct net *net, struct iscsi_transport *transport,
                struct iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
@@ -3028,7 +3058,7 @@ iscsi_tgt_dscvr(struct iscsi_transport *transport,
        if (!transport->tgt_dscvr)
                return -EINVAL;
 
-       shost = scsi_host_lookup(ev->u.tgt_dscvr.host_no);
+       shost = iscsi_host_lookup(net, ev->u.tgt_dscvr.host_no);
        if (!shost) {
                printk(KERN_ERR "target discovery could not find host no %u\n",
                       ev->u.tgt_dscvr.host_no);
@@ -3044,7 +3074,7 @@ iscsi_tgt_dscvr(struct iscsi_transport *transport,
 }
 
 static int
-iscsi_set_host_param(struct iscsi_transport *transport,
+iscsi_set_host_param(struct net *net, struct iscsi_transport *transport,
                     struct iscsi_uevent *ev)
 {
        char *data = (char*)ev + sizeof(*ev);
@@ -3054,7 +3084,7 @@ iscsi_set_host_param(struct iscsi_transport *transport,
        if (!transport->set_host_param)
                return -ENOSYS;
 
-       shost = scsi_host_lookup(ev->u.set_host_param.host_no);
+       shost = iscsi_host_lookup(net, ev->u.set_host_param.host_no);
        if (!shost) {
                printk(KERN_ERR "set_host_param could not find host no %u\n",
                       ev->u.set_host_param.host_no);
@@ -3068,7 +3098,7 @@ iscsi_set_host_param(struct iscsi_transport *transport,
 }
 
 static int
-iscsi_set_path(struct iscsi_transport *transport, struct iscsi_uevent *ev)
+iscsi_set_path(struct net *net, struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
        struct iscsi_path *params;
@@ -3077,7 +3107,7 @@ iscsi_set_path(struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
        if (!transport->set_path)
                return -ENOSYS;
 
-       shost = scsi_host_lookup(ev->u.set_path.host_no);
+       shost = iscsi_host_lookup(net, ev->u.set_path.host_no);
        if (!shost) {
                printk(KERN_ERR "set path could not find host no %u\n",
                       ev->u.set_path.host_no);
@@ -3092,7 +3122,7 @@ iscsi_set_path(struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
 }
 
 static int
-iscsi_set_iface_params(struct iscsi_transport *transport,
+iscsi_set_iface_params(struct net *net, struct iscsi_transport *transport,
                       struct iscsi_uevent *ev, uint32_t len)
 {
        char *data = (char *)ev + sizeof(*ev);
@@ -3102,7 +3132,7 @@ iscsi_set_iface_params(struct iscsi_transport *transport,
        if (!transport->set_iface_param)
                return -ENOSYS;
 
-       shost = scsi_host_lookup(ev->u.set_iface_params.host_no);
+       shost = iscsi_host_lookup(net, ev->u.set_iface_params.host_no);
        if (!shost) {
                printk(KERN_ERR "set_iface_params could not find host no %u\n",
                       ev->u.set_iface_params.host_no);
@@ -3115,7 +3145,7 @@ iscsi_set_iface_params(struct iscsi_transport *transport,
 }
 
 static int
-iscsi_send_ping(struct iscsi_transport *transport, struct iscsi_uevent *ev)
+iscsi_send_ping(struct net *net, struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
        struct sockaddr *dst_addr;
@@ -3124,7 +3154,7 @@ iscsi_send_ping(struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
        if (!transport->send_ping)
                return -ENOSYS;
 
-       shost = scsi_host_lookup(ev->u.iscsi_ping.host_no);
+       shost = iscsi_host_lookup(net, ev->u.iscsi_ping.host_no);
        if (!shost) {
                printk(KERN_ERR "iscsi_ping could not find host no %u\n",
                       ev->u.iscsi_ping.host_no);
@@ -3142,7 +3172,7 @@ iscsi_send_ping(struct iscsi_transport *transport, struct 
iscsi_uevent *ev)
 }
 
 static int
-iscsi_get_chap(const struct net *netns, struct iscsi_transport *transport,
+iscsi_get_chap(struct net *net, struct iscsi_transport *transport,
               struct nlmsghdr *nlh)
 {
        struct iscsi_uevent *ev = nlmsg_data(nlh);
@@ -3166,7 +3196,7 @@ iscsi_get_chap(const struct net *netns, struct 
iscsi_transport *transport,
        chap_buf_size = (ev->u.get_chap.num_entries * sizeof(*chap_rec));
        len = nlmsg_total_size(sizeof(*ev) + chap_buf_size);
 
-       shost = scsi_host_lookup(ev->u.get_chap.host_no);
+       shost = iscsi_host_lookup(net, ev->u.get_chap.host_no);
        if (!shost) {
                printk(KERN_ERR "%s: failed. Could not find host no %u\n",
                       __func__, ev->u.get_chap.host_no);
@@ -3202,7 +3232,7 @@ iscsi_get_chap(const struct net *netns, struct 
iscsi_transport *transport,
                skb_trim(skbchap, NLMSG_ALIGN(actual_size));
                nlhchap->nlmsg_len = actual_size;
 
-               err = iscsi_multicast_skb(netns, skbchap, ISCSI_NL_GRP_ISCSID,
+               err = iscsi_multicast_skb(net, skbchap, ISCSI_NL_GRP_ISCSID,
                                          GFP_KERNEL);
        } while (err < 0 && err != -ECONNREFUSED);
 
@@ -3211,7 +3241,7 @@ iscsi_get_chap(const struct net *netns, struct 
iscsi_transport *transport,
        return err;
 }
 
-static int iscsi_set_chap(struct iscsi_transport *transport,
+static int iscsi_set_chap(struct net *net, struct iscsi_transport *transport,
                          struct iscsi_uevent *ev, uint32_t len)
 {
        char *data = (char *)ev + sizeof(*ev);
@@ -3221,7 +3251,7 @@ static int iscsi_set_chap(struct iscsi_transport 
*transport,
        if (!transport->set_chap)
                return -ENOSYS;
 
-       shost = scsi_host_lookup(ev->u.set_path.host_no);
+       shost = iscsi_host_lookup(net, ev->u.set_path.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.set_path.host_no);
@@ -3233,7 +3263,7 @@ static int iscsi_set_chap(struct iscsi_transport 
*transport,
        return err;
 }
 
-static int iscsi_delete_chap(struct iscsi_transport *transport,
+static int iscsi_delete_chap(struct net *net, struct iscsi_transport 
*transport,
                             struct iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
@@ -3242,7 +3272,7 @@ static int iscsi_delete_chap(struct iscsi_transport 
*transport,
        if (!transport->delete_chap)
                return -ENOSYS;
 
-       shost = scsi_host_lookup(ev->u.delete_chap.host_no);
+       shost = iscsi_host_lookup(net, ev->u.delete_chap.host_no);
        if (!shost) {
                printk(KERN_ERR "%s could not find host no %u\n",
                       __func__, ev->u.delete_chap.host_no);
@@ -3278,7 +3308,7 @@ char *iscsi_get_discovery_parent_name(int parent_type)
 }
 EXPORT_SYMBOL_GPL(iscsi_get_discovery_parent_name);
 
-static int iscsi_set_flashnode_param(struct iscsi_transport *transport,
+static int iscsi_set_flashnode_param(struct net *net, struct iscsi_transport 
*transport,
                                     struct iscsi_uevent *ev, uint32_t len)
 {
        char *data = (char *)ev + sizeof(*ev);
@@ -3294,7 +3324,7 @@ static int iscsi_set_flashnode_param(struct 
iscsi_transport *transport,
                goto exit_set_fnode;
        }
 
-       shost = scsi_host_lookup(ev->u.set_flashnode.host_no);
+       shost = iscsi_host_lookup(net, ev->u.set_flashnode.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.set_flashnode.host_no);
@@ -3331,7 +3361,7 @@ static int iscsi_set_flashnode_param(struct 
iscsi_transport *transport,
        return err;
 }
 
-static int iscsi_new_flashnode(struct iscsi_transport *transport,
+static int iscsi_new_flashnode(struct net *net, struct iscsi_transport 
*transport,
                               struct iscsi_uevent *ev, uint32_t len)
 {
        char *data = (char *)ev + sizeof(*ev);
@@ -3344,7 +3374,7 @@ static int iscsi_new_flashnode(struct iscsi_transport 
*transport,
                goto exit_new_fnode;
        }
 
-       shost = scsi_host_lookup(ev->u.new_flashnode.host_no);
+       shost = iscsi_host_lookup(net, ev->u.new_flashnode.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.new_flashnode.host_no);
@@ -3366,7 +3396,7 @@ static int iscsi_new_flashnode(struct iscsi_transport 
*transport,
        return err;
 }
 
-static int iscsi_del_flashnode(struct iscsi_transport *transport,
+static int iscsi_del_flashnode(struct net *net, struct iscsi_transport 
*transport,
                               struct iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
@@ -3379,7 +3409,7 @@ static int iscsi_del_flashnode(struct iscsi_transport 
*transport,
                goto exit_del_fnode;
        }
 
-       shost = scsi_host_lookup(ev->u.del_flashnode.host_no);
+       shost = iscsi_host_lookup(net, ev->u.del_flashnode.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.del_flashnode.host_no);
@@ -3406,7 +3436,7 @@ static int iscsi_del_flashnode(struct iscsi_transport 
*transport,
        return err;
 }
 
-static int iscsi_login_flashnode(struct iscsi_transport *transport,
+static int iscsi_login_flashnode(struct net *net, struct iscsi_transport 
*transport,
                                 struct iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
@@ -3421,7 +3451,7 @@ static int iscsi_login_flashnode(struct iscsi_transport 
*transport,
                goto exit_login_fnode;
        }
 
-       shost = scsi_host_lookup(ev->u.login_flashnode.host_no);
+       shost = iscsi_host_lookup(net, ev->u.login_flashnode.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.login_flashnode.host_no);
@@ -3458,7 +3488,7 @@ static int iscsi_login_flashnode(struct iscsi_transport 
*transport,
        return err;
 }
 
-static int iscsi_logout_flashnode(struct iscsi_transport *transport,
+static int iscsi_logout_flashnode(struct net *net, struct iscsi_transport 
*transport,
                                  struct iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
@@ -3473,7 +3503,7 @@ static int iscsi_logout_flashnode(struct iscsi_transport 
*transport,
                goto exit_logout_fnode;
        }
 
-       shost = scsi_host_lookup(ev->u.logout_flashnode.host_no);
+       shost = iscsi_host_lookup(net, ev->u.logout_flashnode.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.logout_flashnode.host_no);
@@ -3511,7 +3541,7 @@ static int iscsi_logout_flashnode(struct iscsi_transport 
*transport,
        return err;
 }
 
-static int iscsi_logout_flashnode_sid(struct iscsi_transport *transport,
+static int iscsi_logout_flashnode_sid(struct net *net, struct iscsi_transport 
*transport,
                                      struct iscsi_uevent *ev)
 {
        struct Scsi_Host *shost;
@@ -3523,7 +3553,7 @@ static int iscsi_logout_flashnode_sid(struct 
iscsi_transport *transport,
                goto exit_logout_sid;
        }
 
-       shost = scsi_host_lookup(ev->u.logout_flashnode_sid.host_no);
+       shost = iscsi_host_lookup(net, ev->u.logout_flashnode_sid.host_no);
        if (!shost) {
                pr_err("%s could not find host no %u\n",
                       __func__, ev->u.logout_flashnode.host_no);
@@ -3531,7 +3561,7 @@ static int iscsi_logout_flashnode_sid(struct 
iscsi_transport *transport,
                goto put_host;
        }
 
-       session = iscsi_session_lookup(ev->u.logout_flashnode_sid.sid);
+       session = iscsi_session_lookup(net, ev->u.logout_flashnode_sid.sid);
        if (!session) {
                pr_err("%s could not find session id %u\n",
                       __func__, ev->u.logout_flashnode_sid.sid);
@@ -3549,7 +3579,7 @@ static int iscsi_logout_flashnode_sid(struct 
iscsi_transport *transport,
 }
 
 static int
-iscsi_get_host_stats(const struct net *netns, struct iscsi_transport 
*transport,
+iscsi_get_host_stats(struct net *net, struct iscsi_transport *transport,
                     struct nlmsghdr *nlh)
 {
        struct iscsi_uevent *ev = nlmsg_data(nlh);
@@ -3572,7 +3602,7 @@ iscsi_get_host_stats(const struct net *netns, struct 
iscsi_transport *transport,
        host_stats_size = sizeof(struct iscsi_offload_host_stats);
        len = nlmsg_total_size(sizeof(*ev) + host_stats_size);
 
-       shost = scsi_host_lookup(ev->u.get_host_stats.host_no);
+       shost = iscsi_host_lookup(net, ev->u.get_host_stats.host_no);
        if (!shost) {
                pr_err("%s: failed. Cound not find host no %u\n",
                       __func__, ev->u.get_host_stats.host_no);
@@ -3610,7 +3640,7 @@ iscsi_get_host_stats(const struct net *netns, struct 
iscsi_transport *transport,
                skb_trim(skbhost_stats, NLMSG_ALIGN(actual_size));
                nlhhost_stats->nlmsg_len = actual_size;
 
-               err = iscsi_multicast_skb(netns, skbhost_stats,
+               err = iscsi_multicast_skb(net, skbhost_stats,
                                          ISCSI_NL_GRP_ISCSID, GFP_KERNEL);
        } while (err < 0 && err != -ECONNREFUSED);
 
@@ -3621,7 +3651,7 @@ iscsi_get_host_stats(const struct net *netns, struct 
iscsi_transport *transport,
 
 
 static int
-iscsi_if_recv_msg(const struct net *netns, struct sk_buff *skb,
+iscsi_if_recv_msg(struct net *net, struct sk_buff *skb,
                  struct nlmsghdr *nlh, uint32_t *group)
 {
        int err = 0;
@@ -3653,8 +3683,9 @@ iscsi_if_recv_msg(const struct net *netns, struct sk_buff 
*skb,
                                              ev->u.c_session.cmds_max,
                                              ev->u.c_session.queue_depth);
                break;
+       /* MARK */
        case ISCSI_UEVENT_CREATE_BOUND_SESSION:
-               ep = iscsi_lookup_endpoint(ev->u.c_bound_session.ep_handle);
+               ep = iscsi_lookup_endpoint(net, 
ev->u.c_bound_session.ep_handle);
                if (!ep) {
                        err = -EINVAL;
                        break;
@@ -3667,14 +3698,14 @@ iscsi_if_recv_msg(const struct net *netns, struct 
sk_buff *skb,
                                        ev->u.c_bound_session.queue_depth);
                break;
        case ISCSI_UEVENT_DESTROY_SESSION:
-               session = iscsi_session_lookup(ev->u.d_session.sid);
+               session = iscsi_session_lookup(net, ev->u.d_session.sid);
                if (session)
                        transport->destroy_session(session);
                else
                        err = -EINVAL;
                break;
        case ISCSI_UEVENT_UNBIND_SESSION:
-               session = iscsi_session_lookup(ev->u.d_session.sid);
+               session = iscsi_session_lookup(net, ev->u.d_session.sid);
                if (session)
                        scsi_queue_work(iscsi_session_to_shost(session),
                                        &session->unbind_work);
@@ -3682,17 +3713,17 @@ iscsi_if_recv_msg(const struct net *netns, struct 
sk_buff *skb,
                        err = -EINVAL;
                break;
        case ISCSI_UEVENT_CREATE_CONN:
-               err = iscsi_if_create_conn(transport, ev);
+               err = iscsi_if_create_conn(net, transport, ev);
                break;
        case ISCSI_UEVENT_DESTROY_CONN:
-               err = iscsi_if_destroy_conn(transport, ev);
+               err = iscsi_if_destroy_conn(net, transport, ev);
                break;
        case ISCSI_UEVENT_BIND_CONN:
-               session = iscsi_session_lookup(ev->u.b_conn.sid);
-               conn = iscsi_conn_lookup(ev->u.b_conn.sid, ev->u.b_conn.cid);
+               session = iscsi_session_lookup(net, ev->u.b_conn.sid);
+               conn = iscsi_conn_lookup(net, ev->u.b_conn.sid, 
ev->u.b_conn.cid);
 
                if (conn && conn->ep)
-                       iscsi_if_ep_disconnect(transport, conn->ep->id);
+                       iscsi_if_ep_disconnect(net, transport, conn->ep->id);
 
                if (!session || !conn) {
                        err = -EINVAL;
@@ -3705,7 +3736,7 @@ iscsi_if_recv_msg(const struct net *netns, struct sk_buff 
*skb,
                if (ev->r.retcode || !transport->ep_connect)
                        break;
 
-               ep = iscsi_lookup_endpoint(ev->u.b_conn.transport_eph);
+               ep = iscsi_lookup_endpoint(net, ev->u.b_conn.transport_eph);
                if (ep) {
                        ep->conn = conn;
 
@@ -3718,24 +3749,24 @@ iscsi_if_recv_msg(const struct net *netns, struct 
sk_buff *skb,
                                              "binding\n");
                break;
        case ISCSI_UEVENT_SET_PARAM:
-               err = iscsi_set_param(transport, ev);
+               err = iscsi_set_param(net, transport, ev);
                break;
        case ISCSI_UEVENT_START_CONN:
-               conn = iscsi_conn_lookup(ev->u.start_conn.sid, 
ev->u.start_conn.cid);
+               conn = iscsi_conn_lookup(net, ev->u.start_conn.sid, 
ev->u.start_conn.cid);
                if (conn)
                        ev->r.retcode = transport->start_conn(conn);
                else
                        err = -EINVAL;
                break;
        case ISCSI_UEVENT_STOP_CONN:
-               conn = iscsi_conn_lookup(ev->u.stop_conn.sid, 
ev->u.stop_conn.cid);
+               conn = iscsi_conn_lookup(net, ev->u.stop_conn.sid, 
ev->u.stop_conn.cid);
                if (conn)
                        transport->stop_conn(conn, ev->u.stop_conn.flag);
                else
                        err = -EINVAL;
                break;
        case ISCSI_UEVENT_SEND_PDU:
-               conn = iscsi_conn_lookup(ev->u.send_pdu.sid, 
ev->u.send_pdu.cid);
+               conn = iscsi_conn_lookup(net, ev->u.send_pdu.sid, 
ev->u.send_pdu.cid);
                if (conn)
                        ev->r.retcode = transport->send_pdu(conn,
                                (struct iscsi_hdr*)((char*)ev + sizeof(*ev)),
@@ -3745,63 +3776,63 @@ iscsi_if_recv_msg(const struct net *netns, struct 
sk_buff *skb,
                        err = -EINVAL;
                break;
        case ISCSI_UEVENT_GET_STATS:
-               err = iscsi_if_get_stats(netns, transport, nlh);
+               err = iscsi_if_get_stats(net, transport, nlh);
                break;
        case ISCSI_UEVENT_TRANSPORT_EP_CONNECT:
        case ISCSI_UEVENT_TRANSPORT_EP_POLL:
        case ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT:
        case ISCSI_UEVENT_TRANSPORT_EP_CONNECT_THROUGH_HOST:
-               err = iscsi_if_transport_ep(transport, ev, nlh->nlmsg_type);
+               err = iscsi_if_transport_ep(net, transport, ev, 
nlh->nlmsg_type);
                break;
        case ISCSI_UEVENT_TGT_DSCVR:
-               err = iscsi_tgt_dscvr(transport, ev);
+               err = iscsi_tgt_dscvr(net, transport, ev);
                break;
        case ISCSI_UEVENT_SET_HOST_PARAM:
-               err = iscsi_set_host_param(transport, ev);
+               err = iscsi_set_host_param(net, transport, ev);
                break;
        case ISCSI_UEVENT_PATH_UPDATE:
-               err = iscsi_set_path(transport, ev);
+               err = iscsi_set_path(net, transport, ev);
                break;
        case ISCSI_UEVENT_SET_IFACE_PARAMS:
-               err = iscsi_set_iface_params(transport, ev,
+               err = iscsi_set_iface_params(net, transport, ev,
                                             nlmsg_attrlen(nlh, sizeof(*ev)));
                break;
        case ISCSI_UEVENT_PING:
-               err = iscsi_send_ping(transport, ev);
+               err = iscsi_send_ping(net, transport, ev);
                break;
        case ISCSI_UEVENT_GET_CHAP:
-               err = iscsi_get_chap(netns, transport, nlh);
+               err = iscsi_get_chap(net, transport, nlh);
                break;
        case ISCSI_UEVENT_DELETE_CHAP:
-               err = iscsi_delete_chap(transport, ev);
+               err = iscsi_delete_chap(net, transport, ev);
                break;
        case ISCSI_UEVENT_SET_FLASHNODE_PARAMS:
-               err = iscsi_set_flashnode_param(transport, ev,
+               err = iscsi_set_flashnode_param(net, transport, ev,
                                                nlmsg_attrlen(nlh,
                                                              sizeof(*ev)));
                break;
        case ISCSI_UEVENT_NEW_FLASHNODE:
-               err = iscsi_new_flashnode(transport, ev,
+               err = iscsi_new_flashnode(net, transport, ev,
                                          nlmsg_attrlen(nlh, sizeof(*ev)));
                break;
        case ISCSI_UEVENT_DEL_FLASHNODE:
-               err = iscsi_del_flashnode(transport, ev);
+               err = iscsi_del_flashnode(net, transport, ev);
                break;
        case ISCSI_UEVENT_LOGIN_FLASHNODE:
-               err = iscsi_login_flashnode(transport, ev);
+               err = iscsi_login_flashnode(net, transport, ev);
                break;
        case ISCSI_UEVENT_LOGOUT_FLASHNODE:
-               err = iscsi_logout_flashnode(transport, ev);
+               err = iscsi_logout_flashnode(net, transport, ev);
                break;
        case ISCSI_UEVENT_LOGOUT_FLASHNODE_SID:
-               err = iscsi_logout_flashnode_sid(transport, ev);
+               err = iscsi_logout_flashnode_sid(net, transport, ev);
                break;
        case ISCSI_UEVENT_SET_CHAP:
-               err = iscsi_set_chap(transport, ev,
+               err = iscsi_set_chap(net, transport, ev,
                                     nlmsg_attrlen(nlh, sizeof(*ev)));
                break;
        case ISCSI_UEVENT_GET_HOST_STATS:
-               err = iscsi_get_host_stats(netns, transport, nlh);
+               err = iscsi_get_host_stats(net, transport, nlh);
                break;
        default:
                err = -ENOSYS;
@@ -3820,7 +3851,7 @@ static void
 iscsi_if_rx(struct sk_buff *skb)
 {
        struct sock *sk = skb->sk;
-       const struct net *netns = sock_net(sk);
+       struct net *net = sock_net(sk);
 
        mutex_lock(&rx_queue_mutex);
        while (skb->len >= NLMSG_HDRLEN) {
@@ -3841,7 +3872,7 @@ iscsi_if_rx(struct sk_buff *skb)
                if (rlen > skb->len)
                        rlen = skb->len;
 
-               err = iscsi_if_recv_msg(netns, skb, nlh, &group);
+               err = iscsi_if_recv_msg(net, skb, nlh, &group);
                if (err) {
                        ev->type = ISCSI_KEVENT_IF_ERROR;
                        ev->iferror = err;
@@ -3859,7 +3890,7 @@ iscsi_if_rx(struct sk_buff *skb)
                                break;
                        if (ev->type == ISCSI_UEVENT_GET_HOST_STATS && !err)
                                break;
-                       err = iscsi_if_send_reply(netns, group, nlh->nlmsg_seq,
+                       err = iscsi_if_send_reply(net, group, nlh->nlmsg_seq,
                                nlh->nlmsg_type, 0, 0, ev, sizeof(*ev));
                } while (err < 0 && err != -ECONNREFUSED && err != -ESRCH);
                skb_pull(skb, rlen);
diff --git a/include/scsi/scsi_transport_iscsi.h 
b/include/scsi/scsi_transport_iscsi.h
index 8bbd709dcac2..30ea22fc651c 100644
--- a/include/scsi/scsi_transport_iscsi.h
+++ b/include/scsi/scsi_transport_iscsi.h
@@ -168,6 +168,7 @@ struct iscsi_transport {
        int (*logout_flashnode_sid) (struct iscsi_cls_session *cls_sess);
        int (*get_host_stats) (struct Scsi_Host *shost, char *buf, int len);
        u8 (*check_protection)(struct iscsi_task *task, sector_t *sector);
+       struct net *(*get_netns)(struct Scsi_Host *shost);
 };
 
 /*
@@ -267,6 +268,8 @@ struct iscsi_cls_session {
 #define iscsi_session_to_shost(_session) \
        dev_to_shost(_session->dev.parent)
 
+extern struct net *iscsi_sess_net(struct iscsi_cls_session *);
+
 #define starget_to_session(_stgt) \
        iscsi_dev_to_session(_stgt->dev.parent)
 
@@ -444,7 +447,7 @@ extern void iscsi_block_session(struct iscsi_cls_session 
*session);
 extern int iscsi_scan_finished(struct Scsi_Host *shost, unsigned long time);
 extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size);
 extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep);
-extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle);
+extern struct iscsi_endpoint *iscsi_lookup_endpoint(struct net *net, u64 
handle);
 extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd);
 extern struct iscsi_iface *iscsi_create_iface(struct Scsi_Host *shost,
                                              struct iscsi_transport *t,
-- 
2.9.4

-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To post to this group, send email to open-iscsi@googlegroups.com.
Visit this group at https://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to