aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi/zfcp_fsf.c
diff options
context:
space:
mode:
authorChristof Schmitt <christof.schmitt@de.ibm.com>2009-08-18 09:43:20 -0400
committerJames Bottomley <James.Bottomley@suse.de>2009-09-05 09:49:28 -0400
commit799b76d09aeee558d18c1f5b93e63f58f1d1fc11 (patch)
treea1a05faa773b329246a4fa97ba7c0ac5201b5d40 /drivers/s390/scsi/zfcp_fsf.c
parent564e1c86c810f9ccfe4300afa402815e3db4886d (diff)
[SCSI] zfcp: Decouple gid_pn requests from erp
Don't let the erp wait for gid_pn requests to complete. Instead, queue the gid_pn work, exit erp and let the finished gid_pn work trigger a new port reopen. Reviewed-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/s390/scsi/zfcp_fsf.c')
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c14
1 files changed, 2 insertions, 12 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index b9a16e4b48b4..048f1a848f34 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -1069,10 +1069,8 @@ static int zfcp_fsf_setup_ct_els_sbals(struct zfcp_fsf_req *req,
1069 * zfcp_fsf_send_ct - initiate a Generic Service request (FC-GS) 1069 * zfcp_fsf_send_ct - initiate a Generic Service request (FC-GS)
1070 * @ct: pointer to struct zfcp_send_ct with data for request 1070 * @ct: pointer to struct zfcp_send_ct with data for request
1071 * @pool: if non-null this mempool is used to allocate struct zfcp_fsf_req 1071 * @pool: if non-null this mempool is used to allocate struct zfcp_fsf_req
1072 * @erp_action: if non-null the Generic Service request sent within ERP
1073 */ 1072 */
1074int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool, 1073int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool)
1075 struct zfcp_erp_action *erp_action)
1076{ 1074{
1077 struct zfcp_wka_port *wka_port = ct->wka_port; 1075 struct zfcp_wka_port *wka_port = ct->wka_port;
1078 struct zfcp_qdio *qdio = wka_port->adapter->qdio; 1076 struct zfcp_qdio *qdio = wka_port->adapter->qdio;
@@ -1103,13 +1101,7 @@ int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool,
1103 req->data = ct; 1101 req->data = ct;
1104 1102
1105 zfcp_san_dbf_event_ct_request(req); 1103 zfcp_san_dbf_event_ct_request(req);
1106 1104 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1107 if (erp_action) {
1108 erp_action->fsf_req = req;
1109 req->erp_action = erp_action;
1110 zfcp_fsf_start_erp_timer(req);
1111 } else
1112 zfcp_fsf_start_timer(req, ZFCP_FSF_REQUEST_TIMEOUT);
1113 1105
1114 ret = zfcp_fsf_req_send(req); 1106 ret = zfcp_fsf_req_send(req);
1115 if (ret) 1107 if (ret)
@@ -1119,8 +1111,6 @@ int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool,
1119 1111
1120failed_send: 1112failed_send:
1121 zfcp_fsf_req_free(req); 1113 zfcp_fsf_req_free(req);
1122 if (erp_action)
1123 erp_action->fsf_req = NULL;
1124out: 1114out:
1125 spin_unlock_bh(&qdio->req_q_lock); 1115 spin_unlock_bh(&qdio->req_q_lock);
1126 return ret; 1116 return ret;