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_aux.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_aux.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index ed7211ef04eb..572dcd67e713 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -362,6 +362,11 @@ static int zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter) | |||
362 | if (!adapter->pool.erp_req) | 362 | if (!adapter->pool.erp_req) |
363 | return -ENOMEM; | 363 | return -ENOMEM; |
364 | 364 | ||
365 | adapter->pool.gid_pn_req = | ||
366 | mempool_create_kmalloc_pool(1, sizeof(struct zfcp_fsf_req)); | ||
367 | if (!adapter->pool.gid_pn_req) | ||
368 | return -ENOMEM; | ||
369 | |||
365 | adapter->pool.scsi_req = | 370 | adapter->pool.scsi_req = |
366 | mempool_create_kmalloc_pool(1, sizeof(struct zfcp_fsf_req)); | 371 | mempool_create_kmalloc_pool(1, sizeof(struct zfcp_fsf_req)); |
367 | if (!adapter->pool.scsi_req) | 372 | if (!adapter->pool.scsi_req) |
@@ -379,7 +384,7 @@ static int zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter) | |||
379 | return -ENOMEM; | 384 | return -ENOMEM; |
380 | 385 | ||
381 | adapter->pool.qtcb_pool = | 386 | adapter->pool.qtcb_pool = |
382 | mempool_create_slab_pool(3, zfcp_data.qtcb_cache); | 387 | mempool_create_slab_pool(4, zfcp_data.qtcb_cache); |
383 | if (!adapter->pool.qtcb_pool) | 388 | if (!adapter->pool.qtcb_pool) |
384 | return -ENOMEM; | 389 | return -ENOMEM; |
385 | 390 | ||
@@ -652,7 +657,7 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn, | |||
652 | 657 | ||
653 | init_waitqueue_head(&port->remove_wq); | 658 | init_waitqueue_head(&port->remove_wq); |
654 | INIT_LIST_HEAD(&port->unit_list_head); | 659 | INIT_LIST_HEAD(&port->unit_list_head); |
655 | INIT_WORK(&port->gid_pn_work, zfcp_erp_port_strategy_open_lookup); | 660 | INIT_WORK(&port->gid_pn_work, zfcp_fc_port_did_lookup); |
656 | INIT_WORK(&port->test_link_work, zfcp_fc_link_test_work); | 661 | INIT_WORK(&port->test_link_work, zfcp_fc_link_test_work); |
657 | INIT_WORK(&port->rport_work, zfcp_scsi_rport_work); | 662 | INIT_WORK(&port->rport_work, zfcp_scsi_rport_work); |
658 | 663 | ||