summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/iser/iscsi_iser.c3
-rw-r--r--drivers/infiniband/ulp/iser/iser_initiator.c11
-rw-r--r--drivers/scsi/libiscsi.c5
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 = {
701static struct iscsi_transport iscsi_iser_transport = { 702static 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)
234static int iser_post_rx_bufs(struct iscsi_conn *conn, struct iscsi_hdr *req) 234static 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 }