diff options
-rw-r--r-- | drivers/infiniband/ulp/iser/iscsi_iser.c | 3 | ||||
-rw-r--r-- | drivers/infiniband/ulp/iser/iser_initiator.c | 11 | ||||
-rw-r--r-- | drivers/scsi/libiscsi.c | 5 |
3 files changed, 17 insertions, 2 deletions
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c b/drivers/infiniband/ulp/iser/iscsi_iser.c index 2e84ef859c5b..1ec78bd8fa13 100644 --- a/drivers/infiniband/ulp/iser/iscsi_iser.c +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c | |||
@@ -672,6 +672,7 @@ static umode_t iser_attr_is_visible(int param_type, int param) | |||
672 | case ISCSI_PARAM_TGT_RESET_TMO: | 672 | case ISCSI_PARAM_TGT_RESET_TMO: |
673 | case ISCSI_PARAM_IFACE_NAME: | 673 | case ISCSI_PARAM_IFACE_NAME: |
674 | case ISCSI_PARAM_INITIATOR_NAME: | 674 | case ISCSI_PARAM_INITIATOR_NAME: |
675 | case ISCSI_PARAM_DISCOVERY_SESS: | ||
675 | return S_IRUGO; | 676 | return S_IRUGO; |
676 | default: | 677 | default: |
677 | return 0; | 678 | return 0; |
@@ -701,7 +702,7 @@ static struct scsi_host_template iscsi_iser_sht = { | |||
701 | static struct iscsi_transport iscsi_iser_transport = { | 702 | static struct iscsi_transport iscsi_iser_transport = { |
702 | .owner = THIS_MODULE, | 703 | .owner = THIS_MODULE, |
703 | .name = "iser", | 704 | .name = "iser", |
704 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T, | 705 | .caps = CAP_RECOVERY_L0 | CAP_MULTI_R2T | CAP_TEXT_NEGO, |
705 | /* session management */ | 706 | /* session management */ |
706 | .create_session = iscsi_iser_session_create, | 707 | .create_session = iscsi_iser_session_create, |
707 | .destroy_session = iscsi_iser_session_destroy, | 708 | .destroy_session = iscsi_iser_session_destroy, |
diff --git a/drivers/infiniband/ulp/iser/iser_initiator.c b/drivers/infiniband/ulp/iser/iser_initiator.c index b6d81a86c976..b31fa1d954a0 100644 --- a/drivers/infiniband/ulp/iser/iser_initiator.c +++ b/drivers/infiniband/ulp/iser/iser_initiator.c | |||
@@ -234,6 +234,7 @@ void iser_free_rx_descriptors(struct iser_conn *ib_conn) | |||
234 | static int iser_post_rx_bufs(struct iscsi_conn *conn, struct iscsi_hdr *req) | 234 | static int iser_post_rx_bufs(struct iscsi_conn *conn, struct iscsi_hdr *req) |
235 | { | 235 | { |
236 | struct iscsi_iser_conn *iser_conn = conn->dd_data; | 236 | struct iscsi_iser_conn *iser_conn = conn->dd_data; |
237 | struct iscsi_session *session = conn->session; | ||
237 | 238 | ||
238 | iser_dbg("req op %x flags %x\n", req->opcode, req->flags); | 239 | iser_dbg("req op %x flags %x\n", req->opcode, req->flags); |
239 | /* check if this is the last login - going to full feature phase */ | 240 | /* check if this is the last login - going to full feature phase */ |
@@ -248,7 +249,13 @@ static int iser_post_rx_bufs(struct iscsi_conn *conn, struct iscsi_hdr *req) | |||
248 | WARN_ON(iser_conn->ib_conn->post_recv_buf_count != 1); | 249 | WARN_ON(iser_conn->ib_conn->post_recv_buf_count != 1); |
249 | WARN_ON(atomic_read(&iser_conn->ib_conn->post_send_buf_count) != 0); | 250 | WARN_ON(atomic_read(&iser_conn->ib_conn->post_send_buf_count) != 0); |
250 | 251 | ||
251 | iser_dbg("Initially post: %d\n", ISER_MIN_POSTED_RX); | 252 | if (session->discovery_sess) { |
253 | iser_info("Discovery session, re-using login RX buffer\n"); | ||
254 | return 0; | ||
255 | } else | ||
256 | iser_info("Normal session, posting batch of RX %d buffers\n", | ||
257 | ISER_MIN_POSTED_RX); | ||
258 | |||
252 | /* Initial post receive buffers */ | 259 | /* Initial post receive buffers */ |
253 | if (iser_post_recvm(iser_conn->ib_conn, ISER_MIN_POSTED_RX)) | 260 | if (iser_post_recvm(iser_conn->ib_conn, ISER_MIN_POSTED_RX)) |
254 | return -ENOMEM; | 261 | return -ENOMEM; |
@@ -425,6 +432,8 @@ int iser_send_control(struct iscsi_conn *conn, | |||
425 | } | 432 | } |
426 | 433 | ||
427 | if (task == conn->login_task) { | 434 | if (task == conn->login_task) { |
435 | iser_dbg("op %x dsl %lx, posting login rx buffer\n", | ||
436 | task->hdr->opcode, data_seg_len); | ||
428 | err = iser_post_recvl(iser_conn->ib_conn); | 437 | err = iser_post_recvl(iser_conn->ib_conn); |
429 | if (err) | 438 | if (err) |
430 | goto send_control_error; | 439 | goto send_control_error; |
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index f75761726c7f..e3995612ea76 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
@@ -3170,6 +3170,7 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn, | |||
3170 | { | 3170 | { |
3171 | struct iscsi_conn *conn = cls_conn->dd_data; | 3171 | struct iscsi_conn *conn = cls_conn->dd_data; |
3172 | struct iscsi_session *session = conn->session; | 3172 | struct iscsi_session *session = conn->session; |
3173 | int val; | ||
3173 | 3174 | ||
3174 | switch(param) { | 3175 | switch(param) { |
3175 | case ISCSI_PARAM_FAST_ABORT: | 3176 | case ISCSI_PARAM_FAST_ABORT: |
@@ -3264,6 +3265,10 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn, | |||
3264 | case ISCSI_PARAM_DISCOVERY_PARENT_TYPE: | 3265 | case ISCSI_PARAM_DISCOVERY_PARENT_TYPE: |
3265 | return iscsi_switch_str_param(&session->discovery_parent_type, | 3266 | return iscsi_switch_str_param(&session->discovery_parent_type, |
3266 | buf); | 3267 | buf); |
3268 | case ISCSI_PARAM_DISCOVERY_SESS: | ||
3269 | sscanf(buf, "%d", &val); | ||
3270 | session->discovery_sess = !!val; | ||
3271 | break; | ||
3267 | default: | 3272 | default: |
3268 | return -ENOSYS; | 3273 | return -ENOSYS; |
3269 | } | 3274 | } |