Just trying to cleanup some of the repeated endpoint lookups. --- drivers/infiniband/ulp/iser/iscsi_iser.c | 11 +---------- drivers/scsi/be2iscsi/be_iscsi.c | 8 +------- drivers/scsi/be2iscsi/be_iscsi.h | 1 + drivers/scsi/bnx2i/bnx2i_iscsi.c | 7 +------ drivers/scsi/cxgbi/libcxgbi.c | 8 +------- drivers/scsi/cxgbi/libcxgbi.h | 4 ++-- drivers/scsi/iscsi_tcp.c | 5 +++-- drivers/scsi/qedi/qedi_iscsi.c | 6 +----- drivers/scsi/qla4xxx/ql4_os.c | 8 ++------ drivers/scsi/scsi_transport_iscsi.c | 5 +++-- include/scsi/scsi_transport_iscsi.h | 3 +-- 11 files changed, 17 insertions(+), 49 deletions(-)
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c index 41cad4bd8366..e07352cf8571 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.c +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c @@ -459,29 +459,20 @@ iscsi_iser_conn_create(struct iscsi_cls_session *cls_session, static int iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, uint64_t transport_eph, int is_leading) { 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 */ - 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); - return -EINVAL; - } iser_conn = ep->dd_data; mutex_lock(&iser_conn->state_mutex); diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c index 8f76d0f95ec4..4668b64f1ed1 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.c +++ b/drivers/scsi/be2iscsi/be_iscsi.c @@ -170,6 +170,7 @@ beiscsi_conn_create(struct iscsi_cls_session *cls_session, u32 cid) */ int beiscsi_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, u64 transport_fd, int is_leading) { struct iscsi_conn *conn = cls_conn->dd_data; @@ -179,14 +180,7 @@ int beiscsi_conn_bind(struct iscsi_cls_session *cls_session, struct hwi_controller *phwi_ctrlr = phba->phwi_ctrlr; struct hwi_wrb_context *pwrb_context; struct beiscsi_endpoint *beiscsi_ep; - struct iscsi_endpoint *ep; uint16_t cri_index; - struct net *net; - - net = iscsi_sess_net(cls_session); - ep = iscsi_lookup_endpoint(net, transport_fd); - if (!ep) - return -EINVAL; beiscsi_ep = ep->dd_data; diff --git a/drivers/scsi/be2iscsi/be_iscsi.h b/drivers/scsi/be2iscsi/be_iscsi.h index b9d459a21f25..c263e8e41d35 100644 --- a/drivers/scsi/be2iscsi/be_iscsi.h +++ b/drivers/scsi/be2iscsi/be_iscsi.h @@ -52,6 +52,7 @@ struct iscsi_cls_conn *beiscsi_conn_create(struct iscsi_cls_session int beiscsi_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, uint64_t transport_fd, int is_leading); int beiscsi_ep_get_param(struct iscsi_endpoint *ep, enum iscsi_param param, diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c index 06bd0223c009..406921a3ddbb 100644 --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c @@ -1406,6 +1406,7 @@ bnx2i_conn_create(struct iscsi_cls_session *cls_session, uint32_t cid) */ static int bnx2i_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, uint64_t transport_fd, int is_leading) { struct iscsi_conn *conn = cls_conn->dd_data; @@ -1413,14 +1414,8 @@ static int bnx2i_conn_bind(struct iscsi_cls_session *cls_session, struct Scsi_Host *shost = iscsi_session_to_shost(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; - net = iscsi_sess_net(cls_session); - ep = iscsi_lookup_endpoint(net, transport_fd); - if (!ep) - return -EINVAL; /* * Forcefully terminate all in progress connection recovery at the * earliest, either in bind(), send_pdu(LOGIN), or conn_start() diff --git a/drivers/scsi/cxgbi/libcxgbi.c b/drivers/scsi/cxgbi/libcxgbi.c index 74cb2c7cce32..3d495315859d 100644 --- a/drivers/scsi/cxgbi/libcxgbi.c +++ b/drivers/scsi/cxgbi/libcxgbi.c @@ -2347,23 +2347,17 @@ EXPORT_SYMBOL_GPL(cxgbi_create_conn); int cxgbi_bind_conn(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, u64 transport_eph, int is_leading) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; struct cxgbi_conn *cconn = tcp_conn->dd_data; struct cxgbi_ppm *ppm; - struct iscsi_endpoint *ep; struct cxgbi_endpoint *cep; struct cxgbi_sock *csk; - struct net *net; int err; - net = iscsi_sess_net(cls_session); - ep = iscsi_lookup_endpoint(net, transport_eph); - if (!ep) - return -EINVAL; - /* setup ddp pagesize */ cep = ep->dd_data; csk = cep->csk; diff --git a/drivers/scsi/cxgbi/libcxgbi.h b/drivers/scsi/cxgbi/libcxgbi.h index 31a5816c2e8d..6ece7152b0d3 100644 --- a/drivers/scsi/cxgbi/libcxgbi.h +++ b/drivers/scsi/cxgbi/libcxgbi.h @@ -589,8 +589,8 @@ int cxgbi_set_conn_param(struct iscsi_cls_conn *, enum iscsi_param, char *, int); int cxgbi_get_ep_param(struct iscsi_endpoint *ep, enum iscsi_param, char *); struct iscsi_cls_conn *cxgbi_create_conn(struct iscsi_cls_session *, u32); -int cxgbi_bind_conn(struct iscsi_cls_session *, - struct iscsi_cls_conn *, u64, int); +int cxgbi_bind_conn(struct iscsi_cls_session *, struct iscsi_cls_conn *, + struct iscsi_endpoint *, u64, int); void cxgbi_destroy_session(struct iscsi_cls_session *); struct iscsi_cls_session *cxgbi_create_session(struct iscsi_endpoint *, u16, u16, u32); diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index 19c1036a0ad2..00c441824d57 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c @@ -651,8 +651,9 @@ static void iscsi_sw_tcp_conn_stop(struct iscsi_cls_conn *cls_conn, int flag) static int iscsi_sw_tcp_conn_bind(struct iscsi_cls_session *cls_session, - struct iscsi_cls_conn *cls_conn, uint64_t transport_eph, - int is_leading) + struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, + uint64_t transport_eph, int is_leading) { struct iscsi_session *session = cls_session->dd_data; struct iscsi_conn *conn = cls_conn->dd_data; diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c index 37da9a8b43b1..2a49b02147fe 100644 --- a/drivers/scsi/qedi/qedi_iscsi.c +++ b/drivers/scsi/qedi/qedi_iscsi.c @@ -373,6 +373,7 @@ struct qedi_conn *qedi_get_conn_from_id(struct qedi_ctx *qedi, u32 iscsi_cid) static int qedi_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, u64 transport_fd, int is_leading) { struct iscsi_conn *conn = cls_conn->dd_data; @@ -380,11 +381,6 @@ static int qedi_conn_bind(struct iscsi_cls_session *cls_session, struct Scsi_Host *shost = iscsi_session_to_shost(cls_session); struct qedi_ctx *qedi = iscsi_host_priv(shost); struct qedi_endpoint *qedi_ep; - struct iscsi_endpoint *ep; - - ep = iscsi_lookup_endpoint(transport_fd); - if (!ep) - return -EINVAL; qedi_ep = ep->dd_data; if ((qedi_ep->state == EP_STATE_TCP_FIN_RCVD) || diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c index b881634a24a2..79021797a508 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -130,6 +130,7 @@ static struct iscsi_cls_conn * qla4xxx_conn_create(struct iscsi_cls_session *cls_sess, uint32_t conn_idx); static int qla4xxx_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, uint64_t transport_fd, int is_leading); static void qla4xxx_conn_destroy(struct iscsi_cls_conn *conn); static struct iscsi_cls_session * @@ -3170,15 +3171,14 @@ qla4xxx_conn_create(struct iscsi_cls_session *cls_sess, uint32_t conn_idx) static int qla4xxx_conn_bind(struct iscsi_cls_session *cls_session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, uint64_t transport_fd, int is_leading) { struct iscsi_conn *conn; struct qla_conn *qla_conn; - struct iscsi_endpoint *ep; 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; @@ -3187,10 +3187,6 @@ 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; conn = cls_conn->dd_data; diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index b931e21314ec..426b65bb1017 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -1670,7 +1670,6 @@ struct net *iscsi_sess_net(struct iscsi_cls_session *cls_session) return iscsi_host_net(ihost); } -EXPORT_SYMBOL_GPL(iscsi_sess_net); static const void *iscsi_sess_namespace(struct device *dev) { @@ -3721,6 +3720,8 @@ iscsi_if_recv_msg(struct net *net, struct sk_buff *skb, case ISCSI_UEVENT_BIND_CONN: 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); + ep = iscsi_lookup_endpoint(net, ev->u.b_conn.transport_eph); + /* FIXME, verify this is not NULL ... but no ep for iscsi_tcp ... */ if (conn && conn->ep) iscsi_if_ep_disconnect(net, transport, conn->ep->id); @@ -3730,7 +3731,7 @@ iscsi_if_recv_msg(struct net *net, struct sk_buff *skb, break; } - ev->r.retcode = transport->bind_conn(session, conn, + ev->r.retcode = transport->bind_conn(session, conn, ep, ev->u.b_conn.transport_eph, ev->u.b_conn.is_leading); if (ev->r.retcode || !transport->ep_connect) diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index 30ea22fc651c..16d3eb288221 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h @@ -97,6 +97,7 @@ struct iscsi_transport { uint32_t cid); int (*bind_conn) (struct iscsi_cls_session *session, struct iscsi_cls_conn *cls_conn, + struct iscsi_endpoint *ep, uint64_t transport_eph, int is_leading); int (*start_conn) (struct iscsi_cls_conn *conn); void (*stop_conn) (struct iscsi_cls_conn *conn, int flag); @@ -268,8 +269,6 @@ 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) -- 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.