diff options
author | Christof Schmitt <christof.schmitt@de.ibm.com> | 2009-08-18 09:43:20 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-09-05 09:49:28 -0400 |
commit | 799b76d09aeee558d18c1f5b93e63f58f1d1fc11 (patch) | |
tree | a1a05faa773b329246a4fa97ba7c0ac5201b5d40 /drivers/s390/scsi/zfcp_fsf.c | |
parent | 564e1c86c810f9ccfe4300afa402815e3db4886d (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.c | 14 |
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 | */ |
1074 | int zfcp_fsf_send_ct(struct zfcp_send_ct *ct, mempool_t *pool, | 1073 | int 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 | ||
1120 | failed_send: | 1112 | failed_send: |
1121 | zfcp_fsf_req_free(req); | 1113 | zfcp_fsf_req_free(req); |
1122 | if (erp_action) | ||
1123 | erp_action->fsf_req = NULL; | ||
1124 | out: | 1114 | out: |
1125 | spin_unlock_bh(&qdio->req_q_lock); | 1115 | spin_unlock_bh(&qdio->req_q_lock); |
1126 | return ret; | 1116 | return ret; |