976
977
spin_lock_irqsave(&connlock, flags);
977
978
list_add(&conn->conn_list, &connlist);
979
979
spin_unlock_irqrestore(&connlock, flags);
981
981
ISCSI_DBG_TRANS_CONN(conn, "Completed conn creation\n");
1432
static int iscsi_if_ep_disconnect(struct iscsi_transport *transport,
1435
struct iscsi_cls_conn *conn;
1436
struct iscsi_endpoint *ep;
1438
if (!transport->ep_disconnect)
1441
ep = iscsi_lookup_endpoint(ep_handle);
1446
mutex_lock(&conn->ep_mutex);
1448
mutex_unlock(&conn->ep_mutex);
1451
transport->ep_disconnect(ep);
1434
1456
iscsi_if_transport_ep(struct iscsi_transport *transport,
1435
1457
struct iscsi_uevent *ev, int msg_type)
1454
1476
ev->u.ep_poll.timeout_ms);
1456
1478
case ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT:
1457
if (!transport->ep_disconnect)
1460
ep = iscsi_lookup_endpoint(ev->u.ep_disconnect.ep_handle);
1464
transport->ep_disconnect(ep);
1479
rc = iscsi_if_ep_disconnect(transport,
1480
ev->u.ep_disconnect.ep_handle);
1609
1625
session = iscsi_session_lookup(ev->u.b_conn.sid);
1610
1626
conn = iscsi_conn_lookup(ev->u.b_conn.sid, ev->u.b_conn.cid);
1612
if (session && conn)
1613
ev->r.retcode = transport->bind_conn(session, conn,
1614
ev->u.b_conn.transport_eph,
1615
ev->u.b_conn.is_leading);
1628
if (conn && conn->ep)
1629
iscsi_if_ep_disconnect(transport, conn->ep->id);
1631
if (!session || !conn) {
1636
ev->r.retcode = transport->bind_conn(session, conn,
1637
ev->u.b_conn.transport_eph,
1638
ev->u.b_conn.is_leading);
1639
if (ev->r.retcode || !transport->ep_connect)
1642
ep = iscsi_lookup_endpoint(ev->u.b_conn.transport_eph);
1646
mutex_lock(&conn->ep_mutex);
1648
mutex_unlock(&conn->ep_mutex);
1650
iscsi_cls_conn_printk(KERN_ERR, conn,
1651
"Could not set ep conn "
1619
1654
case ISCSI_UEVENT_SET_PARAM:
1620
1655
err = iscsi_set_param(transport, ev);
1747
1782
iscsi_conn_attr(ifmarker, ISCSI_PARAM_IFMARKER_EN);
1748
1783
iscsi_conn_attr(ofmarker, ISCSI_PARAM_OFMARKER_EN);
1749
1784
iscsi_conn_attr(persistent_port, ISCSI_PARAM_PERSISTENT_PORT);
1750
iscsi_conn_attr(port, ISCSI_PARAM_CONN_PORT);
1751
1785
iscsi_conn_attr(exp_statsn, ISCSI_PARAM_EXP_STATSN);
1752
1786
iscsi_conn_attr(persistent_address, ISCSI_PARAM_PERSISTENT_ADDRESS);
1753
iscsi_conn_attr(address, ISCSI_PARAM_CONN_ADDRESS);
1754
1787
iscsi_conn_attr(ping_tmo, ISCSI_PARAM_PING_TMO);
1755
1788
iscsi_conn_attr(recv_tmo, ISCSI_PARAM_RECV_TMO);
1790
#define iscsi_conn_ep_attr_show(param) \
1791
static ssize_t show_conn_ep_param_##param(struct device *dev, \
1792
struct device_attribute *attr,\
1795
struct iscsi_cls_conn *conn = iscsi_dev_to_conn(dev->parent); \
1796
struct iscsi_transport *t = conn->transport; \
1797
struct iscsi_endpoint *ep; \
1801
* Need to make sure ep_disconnect does not free the LLD's \
1802
* interconnect resources while we are trying to read them. \
1804
mutex_lock(&conn->ep_mutex); \
1806
if (!ep && t->ep_connect) { \
1807
mutex_unlock(&conn->ep_mutex); \
1812
rc = t->get_ep_param(ep, param, buf); \
1814
rc = t->get_conn_param(conn, param, buf); \
1815
mutex_unlock(&conn->ep_mutex); \
1819
#define iscsi_conn_ep_attr(field, param) \
1820
iscsi_conn_ep_attr_show(param) \
1821
static ISCSI_CLASS_ATTR(conn, field, S_IRUGO, \
1822
show_conn_ep_param_##param, NULL);
1824
iscsi_conn_ep_attr(address, ISCSI_PARAM_CONN_ADDRESS);
1825
iscsi_conn_ep_attr(port, ISCSI_PARAM_CONN_PORT);
1758
1828
* iSCSI session attrs