iscsi: add transport end point callbacks
PATCH 1/5 iscsi: add transport end point callbacks
from [email protected]:
add transport end point callbacks so iscsi drivers that cannot connect from userspace, like iscsi tcp, using sockets do not have to implement their own socket infrastructure.
Signed-off-by Or Gerlitz <[email protected]>
Signed-off-by Mike Christie <[email protected]>
drivers/scsi/iscsi_tcp.c +2 -2
@@ -1975,7 +1975,7 @@ iscsi_tcp_conn_destroy(struct iscsi_cls_static int iscsi_tcp_conn_bind (struct iscsi_cls_session *cls_session, -struct iscsi_cls_conn *cls_conn,uint32_t transport_fd, +struct iscsi_cls_conn *cls_conn,uint64_t transport_eph,int is_leading) {struct iscsi_conn *conn = cls_conn->dd_data;
@@ -1985,7 +1985,7 @@ iscsi_tcp_conn_bind(struct iscsi_cls_sesint err;/* lookup for existing socket */ - sock =sockfd_lookup (transport_fd, &err); + sock =sockfd_lookup ((int )transport_eph, &err);if (!sock) {printk (KERN_ERR "iscsi_tcp: sockfd_lookup failed %d\n" , err);return -EEXIST ;
drivers/scsi/scsi_transport_iscsi.c +40 -1
59 lines not on this page · raw message
include/scsi/iscsi_if.h +18 -1
@@ -43,6 +43,10 @@ enum iscsi_uevent_e {ISCSI_UEVENT_GET_STATS =UEVENT_BASE +10 ,ISCSI_UEVENT_GET_PARAM =UEVENT_BASE +11 , +ISCSI_UEVENT_TRANSPORT_EP_CONNECT =UEVENT_BASE +12 , +ISCSI_UEVENT_TRANSPORT_EP_POLL =UEVENT_BASE +13 , +ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT =UEVENT_BASE +14 , +/* up events */ ISCSI_KEVENT_RECV_PDU =KEVENT_BASE +1 , ISCSI_KEVENT_CONN_ERROR = KEVENT_BASE + 2,
@@ -69,7 +73,7 @@ struct iscsi_uevent {struct msg_bind_conn {uint32_t sid;uint32_t cid; -uint32_t transport_fd; +uint64_t transport_eph;uint32_t is_leading; } b_conn;struct msg_destroy_conn {
@@ -102,6 +106,16 @@ struct iscsi_uevent {uint32_t sid;uint32_t cid; } get_stats; +struct msg_transport_connect { +uint32_t non_blocking; + } ep_connect; +struct msg_transport_poll { +uint64_t ep_handle; +uint32_t timeout_ms; + } ep_poll; +struct msg_transport_disconnect { +uint64_t ep_handle; + } ep_disconnect; } u;union {/* messages k -> u */
@@ -124,6 +138,9 @@ struct iscsi_uevent {uint32_t cid;uint32_t error;/* enum iscsi_err */ } connerror; +struct msg_transport_connect_ret { +uint64_t handle; + } ep_connect_ret; } r; } __attribute__ ((aligned (sizeof(uint64_t))));
include/scsi/scsi_transport_iscsi.h +5 -1
@@ -88,7 +88,7 @@ struct iscsi_transport { uint32_t cid);int (*bind_conn) (struct iscsi_cls_session *session,struct iscsi_cls_conn *cls_conn, -uint32_t transport_fd,int is_leading); +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);void (*destroy_conn) (struct iscsi_cls_conn *conn);
@@ -119,6 +119,10 @@ 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, +uint64_t *ep_handle); +int (*ep_poll) (uint64_t ep_handle,int timeout_ms); +void (*ep_disconnect) (uint64_t ep_handle); };/*