struct iscsi_cls_conn *
iscsi_tcp_conn_setup(struct iscsi_cls_session *cls_session, int dd_data_size,
                     uint32_t conn_idx)

{
    struct iscsi_conn *conn;
    struct iscsi_cls_conn *cls_conn;
    struct iscsi_tcp_conn *tcp_conn;

    cls_conn = iscsi_conn_setup(cls_session, sizeof(*tcp_conn), conn_idx);
    if (!cls_conn)
        return NULL;
    conn = cls_conn->dd_data;
    /*
     * due to strange issues with iser these are not set
     * in iscsi_conn_setup
     */
    conn->max_recv_dlength = ISCSI_DEF_MAX_RECV_SEG_LEN;

    tcp_conn = conn->dd_data;
    tcp_conn->iscsi_conn = conn;

    tcp_conn->dd_data = kzalloc(dd_data_size, GFP_KERNEL);
    if (!tcp_conn->dd_data) {
        iscsi_conn_teardown(cls_conn);
        return NULL;
    }
    return cls_conn;
}
void iscsi_tcp_conn_teardown(struct iscsi_cls_conn *cls_conn)
{
    struct iscsi_conn *conn = cls_conn->dd_data;
    struct iscsi_tcp_conn *tcp_conn = conn->dd_data;

    kfree(tcp_conn->dd_data);
    iscsi_conn_teardown(cls_conn);
}
Exemple #3
0
static void
iscsi_iser_conn_destroy(struct iscsi_cls_conn *cls_conn)
{
	struct iscsi_conn *conn = cls_conn->dd_data;
	struct iscsi_iser_conn *iser_conn = conn->dd_data;
	struct iser_conn *ib_conn = iser_conn->ib_conn;

	iscsi_conn_teardown(cls_conn);
	
	if (ib_conn) {
		ib_conn->iser_conn = NULL;
		iser_conn_put(ib_conn);
	}
}
Exemple #4
0
static void
iscsi_iser_conn_destroy(struct iscsi_cls_conn *cls_conn)
{
	struct iscsi_conn *conn = cls_conn->dd_data;
	struct iser_conn *ib_conn = conn->dd_data;

	iscsi_conn_teardown(cls_conn);
	/*
	 * Userspace will normally call the stop callback and
	 * already have freed the ib_conn, but if it goofed up then
	 * we free it here.
	 */
	if (ib_conn) {
		ib_conn->iscsi_conn = NULL;
		iser_conn_put(ib_conn, 1); /* deref iscsi/ib conn unbinding */
	}
}
Exemple #5
0
void iscsi_tcp_conn_teardown(struct iscsi_cls_conn *cls_conn)
{
	iscsi_conn_teardown(cls_conn);
}