aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/ibmvscsi/ibmvfc.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index 406ab27f80e9..58f8c9e39ae8 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -556,11 +556,12 @@ static void ibmvfc_link_down(struct ibmvfc_host *vhost,
556/** 556/**
557 * ibmvfc_init_host - Start host initialization 557 * ibmvfc_init_host - Start host initialization
558 * @vhost: ibmvfc host struct 558 * @vhost: ibmvfc host struct
559 * @relogin: is this a re-login?
559 * 560 *
560 * Return value: 561 * Return value:
561 * nothing 562 * nothing
562 **/ 563 **/
563static void ibmvfc_init_host(struct ibmvfc_host *vhost) 564static void ibmvfc_init_host(struct ibmvfc_host *vhost, int relogin)
564{ 565{
565 struct ibmvfc_target *tgt; 566 struct ibmvfc_target *tgt;
566 567
@@ -574,6 +575,11 @@ static void ibmvfc_init_host(struct ibmvfc_host *vhost)
574 } 575 }
575 576
576 if (!ibmvfc_set_host_state(vhost, IBMVFC_INITIALIZING)) { 577 if (!ibmvfc_set_host_state(vhost, IBMVFC_INITIALIZING)) {
578 if (!relogin) {
579 memset(vhost->async_crq.msgs, 0, PAGE_SIZE);
580 vhost->async_crq.cur = 0;
581 }
582
577 list_for_each_entry(tgt, &vhost->targets, queue) 583 list_for_each_entry(tgt, &vhost->targets, queue)
578 tgt->need_login = 1; 584 tgt->need_login = 1;
579 scsi_block_requests(vhost->host); 585 scsi_block_requests(vhost->host);
@@ -2084,11 +2090,11 @@ static void ibmvfc_handle_async(struct ibmvfc_async_crq *crq,
2084 case IBMVFC_AE_LINK_UP: 2090 case IBMVFC_AE_LINK_UP:
2085 case IBMVFC_AE_RESUME: 2091 case IBMVFC_AE_RESUME:
2086 vhost->events_to_log |= IBMVFC_AE_LINKUP; 2092 vhost->events_to_log |= IBMVFC_AE_LINKUP;
2087 ibmvfc_init_host(vhost); 2093 ibmvfc_init_host(vhost, 1);
2088 break; 2094 break;
2089 case IBMVFC_AE_SCN_FABRIC: 2095 case IBMVFC_AE_SCN_FABRIC:
2090 vhost->events_to_log |= IBMVFC_AE_RSCN; 2096 vhost->events_to_log |= IBMVFC_AE_RSCN;
2091 ibmvfc_init_host(vhost); 2097 ibmvfc_init_host(vhost, 1);
2092 break; 2098 break;
2093 case IBMVFC_AE_SCN_NPORT: 2099 case IBMVFC_AE_SCN_NPORT:
2094 case IBMVFC_AE_SCN_GROUP: 2100 case IBMVFC_AE_SCN_GROUP:
@@ -2134,13 +2140,13 @@ static void ibmvfc_handle_crq(struct ibmvfc_crq *crq, struct ibmvfc_host *vhost)
2134 /* Send back a response */ 2140 /* Send back a response */
2135 rc = ibmvfc_send_crq_init_complete(vhost); 2141 rc = ibmvfc_send_crq_init_complete(vhost);
2136 if (rc == 0) 2142 if (rc == 0)
2137 ibmvfc_init_host(vhost); 2143 ibmvfc_init_host(vhost, 0);
2138 else 2144 else
2139 dev_err(vhost->dev, "Unable to send init rsp. rc=%ld\n", rc); 2145 dev_err(vhost->dev, "Unable to send init rsp. rc=%ld\n", rc);
2140 break; 2146 break;
2141 case IBMVFC_CRQ_INIT_COMPLETE: 2147 case IBMVFC_CRQ_INIT_COMPLETE:
2142 dev_info(vhost->dev, "Partner initialization complete\n"); 2148 dev_info(vhost->dev, "Partner initialization complete\n");
2143 ibmvfc_init_host(vhost); 2149 ibmvfc_init_host(vhost, 0);
2144 break; 2150 break;
2145 default: 2151 default:
2146 dev_err(vhost->dev, "Unknown crq message type: %d\n", crq->format); 2152 dev_err(vhost->dev, "Unknown crq message type: %d\n", crq->format);
@@ -3358,8 +3364,6 @@ static void ibmvfc_npiv_login(struct ibmvfc_host *vhost)
3358 mad->buffer.va = vhost->login_buf_dma; 3364 mad->buffer.va = vhost->login_buf_dma;
3359 mad->buffer.len = sizeof(*vhost->login_buf); 3365 mad->buffer.len = sizeof(*vhost->login_buf);
3360 3366
3361 memset(vhost->async_crq.msgs, 0, PAGE_SIZE);
3362 vhost->async_crq.cur = 0;
3363 ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT_WAIT); 3367 ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT_WAIT);
3364 3368
3365 if (!ibmvfc_send_event(evt, vhost, default_timeout)) 3369 if (!ibmvfc_send_event(evt, vhost, default_timeout))