Loading drivers/scsi/iscsi_tcp.c +24 −128 Original line number Diff line number Diff line Loading @@ -2130,19 +2130,21 @@ iscsi_r2tpool_free(struct iscsi_session *session) static int iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, uint32_t value) char *buf, int buflen) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_session *session = conn->session; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; int value; switch(param) { case ISCSI_PARAM_MAX_RECV_DLENGTH: { char *saveptr = tcp_conn->data; gfp_t flags = GFP_KERNEL; sscanf(buf, "%d", &value); if (tcp_conn->data_size >= value) { conn->max_recv_dlength = value; iscsi_set_param(cls_conn, param, buf, buflen); break; } Loading @@ -2165,15 +2167,12 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, else free_pages((unsigned long)saveptr, get_order(tcp_conn->data_size)); conn->max_recv_dlength = value; iscsi_set_param(cls_conn, param, buf, buflen); tcp_conn->data_size = value; } break; case ISCSI_PARAM_MAX_XMIT_DLENGTH: conn->max_xmit_dlength = value; break; } case ISCSI_PARAM_HDRDGST_EN: conn->hdrdgst_en = value; iscsi_set_param(cls_conn, param, buf, buflen); tcp_conn->hdr_size = sizeof(struct iscsi_hdr); if (conn->hdrdgst_en) { tcp_conn->hdr_size += sizeof(__u32); Loading @@ -2197,7 +2196,7 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, } break; case ISCSI_PARAM_DATADGST_EN: conn->datadgst_en = value; iscsi_set_param(cls_conn, param, buf, buflen); if (conn->datadgst_en) { if (!tcp_conn->data_tx_tfm) tcp_conn->data_tx_tfm = Loading @@ -2220,121 +2219,36 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, tcp_conn->sendpage = conn->datadgst_en ? sock_no_sendpage : tcp_conn->sock->ops->sendpage; break; case ISCSI_PARAM_INITIAL_R2T_EN: session->initial_r2t_en = value; break; case ISCSI_PARAM_MAX_R2T: sscanf(buf, "%d", &value); if (session->max_r2t == roundup_pow_of_two(value)) break; iscsi_r2tpool_free(session); session->max_r2t = value; iscsi_set_param(cls_conn, param, buf, buflen); if (session->max_r2t & (session->max_r2t - 1)) session->max_r2t = roundup_pow_of_two(session->max_r2t); if (iscsi_r2tpool_alloc(session)) return -ENOMEM; break; case ISCSI_PARAM_IMM_DATA_EN: session->imm_data_en = value; break; case ISCSI_PARAM_FIRST_BURST: session->first_burst = value; break; case ISCSI_PARAM_MAX_BURST: session->max_burst = value; break; case ISCSI_PARAM_PDU_INORDER_EN: session->pdu_inorder_en = value; break; case ISCSI_PARAM_DATASEQ_INORDER_EN: session->dataseq_inorder_en = value; break; case ISCSI_PARAM_ERL: session->erl = value; break; case ISCSI_PARAM_IFMARKER_EN: BUG_ON(value); session->ifmarker_en = value; break; case ISCSI_PARAM_OFMARKER_EN: BUG_ON(value); session->ofmarker_en = value; break; case ISCSI_PARAM_EXP_STATSN: conn->exp_statsn = value; break; default: break; return iscsi_set_param(cls_conn, param, buf, buflen); } return 0; } static int iscsi_session_get_param(struct iscsi_cls_session *cls_session, enum iscsi_param param, uint32_t *value) { struct Scsi_Host *shost = iscsi_session_to_shost(cls_session); struct iscsi_session *session = iscsi_hostdata(shost->hostdata); switch(param) { case ISCSI_PARAM_INITIAL_R2T_EN: *value = session->initial_r2t_en; break; case ISCSI_PARAM_MAX_R2T: *value = session->max_r2t; break; case ISCSI_PARAM_IMM_DATA_EN: *value = session->imm_data_en; break; case ISCSI_PARAM_FIRST_BURST: *value = session->first_burst; break; case ISCSI_PARAM_MAX_BURST: *value = session->max_burst; break; case ISCSI_PARAM_PDU_INORDER_EN: *value = session->pdu_inorder_en; break; case ISCSI_PARAM_DATASEQ_INORDER_EN: *value = session->dataseq_inorder_en; break; case ISCSI_PARAM_ERL: *value = session->erl; break; case ISCSI_PARAM_IFMARKER_EN: *value = session->ifmarker_en; break; case ISCSI_PARAM_OFMARKER_EN: *value = session->ofmarker_en; break; default: return -EINVAL; } return 0; } static int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, uint32_t *value) iscsi_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, char *buf) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; struct inet_sock *inet; struct ipv6_pinfo *np; struct sock *sk; int len; switch(param) { case ISCSI_PARAM_MAX_RECV_DLENGTH: *value = conn->max_recv_dlength; break; case ISCSI_PARAM_MAX_XMIT_DLENGTH: *value = conn->max_xmit_dlength; break; case ISCSI_PARAM_HDRDGST_EN: *value = conn->hdrdgst_en; break; case ISCSI_PARAM_DATADGST_EN: *value = conn->datadgst_en; break; case ISCSI_PARAM_CONN_PORT: mutex_lock(&conn->xmitmutex); if (!tcp_conn->sock) { Loading @@ -2343,30 +2257,9 @@ iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, } inet = inet_sk(tcp_conn->sock->sk); *value = be16_to_cpu(inet->dport); len = sprintf(buf, "%hu\n", be16_to_cpu(inet->dport)); mutex_unlock(&conn->xmitmutex); case ISCSI_PARAM_EXP_STATSN: *value = conn->exp_statsn; break; default: return -EINVAL; } return 0; } static int iscsi_conn_get_str_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, char *buf) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; struct sock *sk; struct inet_sock *inet; struct ipv6_pinfo *np; int len = 0; switch (param) { case ISCSI_PARAM_CONN_ADDRESS: mutex_lock(&conn->xmitmutex); if (!tcp_conn->sock) { Loading @@ -2388,7 +2281,7 @@ iscsi_conn_get_str_param(struct iscsi_cls_conn *cls_conn, mutex_unlock(&conn->xmitmutex); break; default: return -EINVAL; return iscsi_conn_get_param(cls_conn, param, buf); } return len; Loading Loading @@ -2501,7 +2394,11 @@ static struct iscsi_transport iscsi_tcp_transport = { ISCSI_ERL | ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS | ISCSI_EXP_STATSN, ISCSI_EXP_STATSN | ISCSI_PERSISTENT_PORT | ISCSI_PERSISTENT_ADDRESS | ISCSI_TARGET_NAME | ISCSI_TPGT, .host_template = &iscsi_sht, .conndata_size = sizeof(struct iscsi_conn), .max_conn = 1, Loading @@ -2514,8 +2411,7 @@ static struct iscsi_transport iscsi_tcp_transport = { .bind_conn = iscsi_tcp_conn_bind, .destroy_conn = iscsi_tcp_conn_destroy, .set_param = iscsi_conn_set_param, .get_conn_param = iscsi_conn_get_param, .get_conn_str_param = iscsi_conn_get_str_param, .get_conn_param = iscsi_tcp_conn_get_param, .get_session_param = iscsi_session_get_param, .start_conn = iscsi_conn_start, .stop_conn = iscsi_conn_stop, Loading Loading
drivers/scsi/iscsi_tcp.c +24 −128 Original line number Diff line number Diff line Loading @@ -2130,19 +2130,21 @@ iscsi_r2tpool_free(struct iscsi_session *session) static int iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, uint32_t value) char *buf, int buflen) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_session *session = conn->session; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; int value; switch(param) { case ISCSI_PARAM_MAX_RECV_DLENGTH: { char *saveptr = tcp_conn->data; gfp_t flags = GFP_KERNEL; sscanf(buf, "%d", &value); if (tcp_conn->data_size >= value) { conn->max_recv_dlength = value; iscsi_set_param(cls_conn, param, buf, buflen); break; } Loading @@ -2165,15 +2167,12 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, else free_pages((unsigned long)saveptr, get_order(tcp_conn->data_size)); conn->max_recv_dlength = value; iscsi_set_param(cls_conn, param, buf, buflen); tcp_conn->data_size = value; } break; case ISCSI_PARAM_MAX_XMIT_DLENGTH: conn->max_xmit_dlength = value; break; } case ISCSI_PARAM_HDRDGST_EN: conn->hdrdgst_en = value; iscsi_set_param(cls_conn, param, buf, buflen); tcp_conn->hdr_size = sizeof(struct iscsi_hdr); if (conn->hdrdgst_en) { tcp_conn->hdr_size += sizeof(__u32); Loading @@ -2197,7 +2196,7 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, } break; case ISCSI_PARAM_DATADGST_EN: conn->datadgst_en = value; iscsi_set_param(cls_conn, param, buf, buflen); if (conn->datadgst_en) { if (!tcp_conn->data_tx_tfm) tcp_conn->data_tx_tfm = Loading @@ -2220,121 +2219,36 @@ iscsi_conn_set_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, tcp_conn->sendpage = conn->datadgst_en ? sock_no_sendpage : tcp_conn->sock->ops->sendpage; break; case ISCSI_PARAM_INITIAL_R2T_EN: session->initial_r2t_en = value; break; case ISCSI_PARAM_MAX_R2T: sscanf(buf, "%d", &value); if (session->max_r2t == roundup_pow_of_two(value)) break; iscsi_r2tpool_free(session); session->max_r2t = value; iscsi_set_param(cls_conn, param, buf, buflen); if (session->max_r2t & (session->max_r2t - 1)) session->max_r2t = roundup_pow_of_two(session->max_r2t); if (iscsi_r2tpool_alloc(session)) return -ENOMEM; break; case ISCSI_PARAM_IMM_DATA_EN: session->imm_data_en = value; break; case ISCSI_PARAM_FIRST_BURST: session->first_burst = value; break; case ISCSI_PARAM_MAX_BURST: session->max_burst = value; break; case ISCSI_PARAM_PDU_INORDER_EN: session->pdu_inorder_en = value; break; case ISCSI_PARAM_DATASEQ_INORDER_EN: session->dataseq_inorder_en = value; break; case ISCSI_PARAM_ERL: session->erl = value; break; case ISCSI_PARAM_IFMARKER_EN: BUG_ON(value); session->ifmarker_en = value; break; case ISCSI_PARAM_OFMARKER_EN: BUG_ON(value); session->ofmarker_en = value; break; case ISCSI_PARAM_EXP_STATSN: conn->exp_statsn = value; break; default: break; return iscsi_set_param(cls_conn, param, buf, buflen); } return 0; } static int iscsi_session_get_param(struct iscsi_cls_session *cls_session, enum iscsi_param param, uint32_t *value) { struct Scsi_Host *shost = iscsi_session_to_shost(cls_session); struct iscsi_session *session = iscsi_hostdata(shost->hostdata); switch(param) { case ISCSI_PARAM_INITIAL_R2T_EN: *value = session->initial_r2t_en; break; case ISCSI_PARAM_MAX_R2T: *value = session->max_r2t; break; case ISCSI_PARAM_IMM_DATA_EN: *value = session->imm_data_en; break; case ISCSI_PARAM_FIRST_BURST: *value = session->first_burst; break; case ISCSI_PARAM_MAX_BURST: *value = session->max_burst; break; case ISCSI_PARAM_PDU_INORDER_EN: *value = session->pdu_inorder_en; break; case ISCSI_PARAM_DATASEQ_INORDER_EN: *value = session->dataseq_inorder_en; break; case ISCSI_PARAM_ERL: *value = session->erl; break; case ISCSI_PARAM_IFMARKER_EN: *value = session->ifmarker_en; break; case ISCSI_PARAM_OFMARKER_EN: *value = session->ofmarker_en; break; default: return -EINVAL; } return 0; } static int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, uint32_t *value) iscsi_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, char *buf) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; struct inet_sock *inet; struct ipv6_pinfo *np; struct sock *sk; int len; switch(param) { case ISCSI_PARAM_MAX_RECV_DLENGTH: *value = conn->max_recv_dlength; break; case ISCSI_PARAM_MAX_XMIT_DLENGTH: *value = conn->max_xmit_dlength; break; case ISCSI_PARAM_HDRDGST_EN: *value = conn->hdrdgst_en; break; case ISCSI_PARAM_DATADGST_EN: *value = conn->datadgst_en; break; case ISCSI_PARAM_CONN_PORT: mutex_lock(&conn->xmitmutex); if (!tcp_conn->sock) { Loading @@ -2343,30 +2257,9 @@ iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, } inet = inet_sk(tcp_conn->sock->sk); *value = be16_to_cpu(inet->dport); len = sprintf(buf, "%hu\n", be16_to_cpu(inet->dport)); mutex_unlock(&conn->xmitmutex); case ISCSI_PARAM_EXP_STATSN: *value = conn->exp_statsn; break; default: return -EINVAL; } return 0; } static int iscsi_conn_get_str_param(struct iscsi_cls_conn *cls_conn, enum iscsi_param param, char *buf) { struct iscsi_conn *conn = cls_conn->dd_data; struct iscsi_tcp_conn *tcp_conn = conn->dd_data; struct sock *sk; struct inet_sock *inet; struct ipv6_pinfo *np; int len = 0; switch (param) { case ISCSI_PARAM_CONN_ADDRESS: mutex_lock(&conn->xmitmutex); if (!tcp_conn->sock) { Loading @@ -2388,7 +2281,7 @@ iscsi_conn_get_str_param(struct iscsi_cls_conn *cls_conn, mutex_unlock(&conn->xmitmutex); break; default: return -EINVAL; return iscsi_conn_get_param(cls_conn, param, buf); } return len; Loading Loading @@ -2501,7 +2394,11 @@ static struct iscsi_transport iscsi_tcp_transport = { ISCSI_ERL | ISCSI_CONN_PORT | ISCSI_CONN_ADDRESS | ISCSI_EXP_STATSN, ISCSI_EXP_STATSN | ISCSI_PERSISTENT_PORT | ISCSI_PERSISTENT_ADDRESS | ISCSI_TARGET_NAME | ISCSI_TPGT, .host_template = &iscsi_sht, .conndata_size = sizeof(struct iscsi_conn), .max_conn = 1, Loading @@ -2514,8 +2411,7 @@ static struct iscsi_transport iscsi_tcp_transport = { .bind_conn = iscsi_tcp_conn_bind, .destroy_conn = iscsi_tcp_conn_destroy, .set_param = iscsi_conn_set_param, .get_conn_param = iscsi_conn_get_param, .get_conn_str_param = iscsi_conn_get_str_param, .get_conn_param = iscsi_tcp_conn_get_param, .get_session_param = iscsi_session_get_param, .start_conn = iscsi_conn_start, .stop_conn = iscsi_conn_stop, Loading