diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 29 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_def.h | 2 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 2 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fc.c | 2 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fsf.c | 2 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 5 |
6 files changed, 34 insertions, 8 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index de623292277b..f785cbc7520d 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -176,8 +176,6 @@ static int __init zfcp_module_init(void) | |||
176 | if (!zfcp_data.gid_pn_cache) | 176 | if (!zfcp_data.gid_pn_cache) |
177 | goto out_gid_cache; | 177 | goto out_gid_cache; |
178 | 178 | ||
179 | zfcp_data.work_queue = create_singlethread_workqueue("zfcp_wq"); | ||
180 | |||
181 | sema_init(&zfcp_data.config_sema, 1); | 179 | sema_init(&zfcp_data.config_sema, 1); |
182 | rwlock_init(&zfcp_data.config_lock); | 180 | rwlock_init(&zfcp_data.config_lock); |
183 | 181 | ||
@@ -458,6 +456,27 @@ static void zfcp_print_sl(struct seq_file *m, struct service_level *sl) | |||
458 | adapter->fsf_lic_version); | 456 | adapter->fsf_lic_version); |
459 | } | 457 | } |
460 | 458 | ||
459 | static int zfcp_setup_adapter_work_queue(struct zfcp_adapter *adapter) | ||
460 | { | ||
461 | char name[TASK_COMM_LEN]; | ||
462 | |||
463 | snprintf(name, sizeof(name), "zfcp_q_%s", | ||
464 | dev_name(&adapter->ccw_device->dev)); | ||
465 | adapter->work_queue = create_singlethread_workqueue(name); | ||
466 | |||
467 | if (adapter->work_queue) | ||
468 | return 0; | ||
469 | return -ENOMEM; | ||
470 | } | ||
471 | |||
472 | static void zfcp_destroy_adapter_work_queue(struct zfcp_adapter *adapter) | ||
473 | { | ||
474 | if (adapter->work_queue) | ||
475 | destroy_workqueue(adapter->work_queue); | ||
476 | adapter->work_queue = NULL; | ||
477 | |||
478 | } | ||
479 | |||
461 | /** | 480 | /** |
462 | * zfcp_adapter_enqueue - enqueue a new adapter to the list | 481 | * zfcp_adapter_enqueue - enqueue a new adapter to the list |
463 | * @ccw_device: pointer to the struct cc_device | 482 | * @ccw_device: pointer to the struct cc_device |
@@ -504,6 +523,9 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||
504 | if (zfcp_adapter_debug_register(adapter)) | 523 | if (zfcp_adapter_debug_register(adapter)) |
505 | goto debug_register_failed; | 524 | goto debug_register_failed; |
506 | 525 | ||
526 | if (zfcp_setup_adapter_work_queue(adapter)) | ||
527 | goto work_queue_failed; | ||
528 | |||
507 | init_waitqueue_head(&adapter->remove_wq); | 529 | init_waitqueue_head(&adapter->remove_wq); |
508 | init_waitqueue_head(&adapter->erp_thread_wqh); | 530 | init_waitqueue_head(&adapter->erp_thread_wqh); |
509 | init_waitqueue_head(&adapter->erp_done_wqh); | 531 | init_waitqueue_head(&adapter->erp_done_wqh); |
@@ -543,6 +565,8 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device) | |||
543 | return 0; | 565 | return 0; |
544 | 566 | ||
545 | sysfs_failed: | 567 | sysfs_failed: |
568 | zfcp_destroy_adapter_work_queue(adapter); | ||
569 | work_queue_failed: | ||
546 | zfcp_adapter_debug_unregister(adapter); | 570 | zfcp_adapter_debug_unregister(adapter); |
547 | debug_register_failed: | 571 | debug_register_failed: |
548 | dev_set_drvdata(&ccw_device->dev, NULL); | 572 | dev_set_drvdata(&ccw_device->dev, NULL); |
@@ -579,6 +603,7 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter) | |||
579 | if (!retval) | 603 | if (!retval) |
580 | return; | 604 | return; |
581 | 605 | ||
606 | zfcp_destroy_adapter_work_queue(adapter); | ||
582 | zfcp_adapter_debug_unregister(adapter); | 607 | zfcp_adapter_debug_unregister(adapter); |
583 | zfcp_qdio_free(adapter); | 608 | zfcp_qdio_free(adapter); |
584 | zfcp_free_low_mem_buffers(adapter); | 609 | zfcp_free_low_mem_buffers(adapter); |
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h index 1e27ed5d90e0..2715a103e5a8 100644 --- a/drivers/s390/scsi/zfcp_def.h +++ b/drivers/s390/scsi/zfcp_def.h | |||
@@ -485,6 +485,7 @@ struct zfcp_adapter { | |||
485 | struct work_struct scan_work; | 485 | struct work_struct scan_work; |
486 | struct service_level service_level; | 486 | struct service_level service_level; |
487 | atomic_t qdio_outb_full; /* queue full incidents */ | 487 | atomic_t qdio_outb_full; /* queue full incidents */ |
488 | struct workqueue_struct *work_queue; | ||
488 | }; | 489 | }; |
489 | 490 | ||
490 | struct zfcp_port { | 491 | struct zfcp_port { |
@@ -573,7 +574,6 @@ struct zfcp_data { | |||
573 | struct kmem_cache *qtcb_cache; | 574 | struct kmem_cache *qtcb_cache; |
574 | struct kmem_cache *sr_buffer_cache; | 575 | struct kmem_cache *sr_buffer_cache; |
575 | struct kmem_cache *gid_pn_cache; | 576 | struct kmem_cache *gid_pn_cache; |
576 | struct workqueue_struct *work_queue; | ||
577 | }; | 577 | }; |
578 | 578 | ||
579 | /********************** ZFCP SPECIFIC DEFINES ********************************/ | 579 | /********************** ZFCP SPECIFIC DEFINES ********************************/ |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index a377e2f91251..50e5fbe2252a 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -875,7 +875,7 @@ static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act) | |||
875 | return zfcp_erp_open_ptp_port(act); | 875 | return zfcp_erp_open_ptp_port(act); |
876 | if (!port->d_id) { | 876 | if (!port->d_id) { |
877 | zfcp_port_get(port); | 877 | zfcp_port_get(port); |
878 | if (!queue_work(zfcp_data.work_queue, | 878 | if (!queue_work(adapter->work_queue, |
879 | &port->gid_pn_work)) | 879 | &port->gid_pn_work)) |
880 | zfcp_port_put(port); | 880 | zfcp_port_put(port); |
881 | return ZFCP_ERP_CONTINUES; | 881 | return ZFCP_ERP_CONTINUES; |
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index acadcd3c276a..8921e16fdab7 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -480,7 +480,7 @@ out: | |||
480 | void zfcp_test_link(struct zfcp_port *port) | 480 | void zfcp_test_link(struct zfcp_port *port) |
481 | { | 481 | { |
482 | zfcp_port_get(port); | 482 | zfcp_port_get(port); |
483 | if (!queue_work(zfcp_data.work_queue, &port->test_link_work)) | 483 | if (!queue_work(port->adapter->work_queue, &port->test_link_work)) |
484 | zfcp_port_put(port); | 484 | zfcp_port_put(port); |
485 | } | 485 | } |
486 | 486 | ||
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index 70a978a14f2a..5b73f989a629 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -305,7 +305,7 @@ static void zfcp_fsf_status_read_handler(struct zfcp_fsf_req *req) | |||
305 | zfcp_fsf_req_free(req); | 305 | zfcp_fsf_req_free(req); |
306 | 306 | ||
307 | atomic_inc(&adapter->stat_miss); | 307 | atomic_inc(&adapter->stat_miss); |
308 | queue_work(zfcp_data.work_queue, &adapter->stat_work); | 308 | queue_work(adapter->work_queue, &adapter->stat_work); |
309 | } | 309 | } |
310 | 310 | ||
311 | static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req) | 311 | static void zfcp_fsf_fsfstatus_qual_eval(struct zfcp_fsf_req *req) |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 0de059161b35..2e13d41269a4 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -572,7 +572,7 @@ void zfcp_scsi_schedule_rport_register(struct zfcp_port *port) | |||
572 | zfcp_port_get(port); | 572 | zfcp_port_get(port); |
573 | port->rport_task = RPORT_ADD; | 573 | port->rport_task = RPORT_ADD; |
574 | 574 | ||
575 | if (!queue_work(zfcp_data.work_queue, &port->rport_work)) | 575 | if (!queue_work(port->adapter->work_queue, &port->rport_work)) |
576 | zfcp_port_put(port); | 576 | zfcp_port_put(port); |
577 | } | 577 | } |
578 | 578 | ||
@@ -581,7 +581,8 @@ void zfcp_scsi_schedule_rport_block(struct zfcp_port *port) | |||
581 | zfcp_port_get(port); | 581 | zfcp_port_get(port); |
582 | port->rport_task = RPORT_DEL; | 582 | port->rport_task = RPORT_DEL; |
583 | 583 | ||
584 | if (port->rport && queue_work(zfcp_data.work_queue, &port->rport_work)) | 584 | if (port->rport && queue_work(port->adapter->work_queue, |
585 | &port->rport_work)) | ||
585 | return; | 586 | return; |
586 | 587 | ||
587 | zfcp_port_put(port); | 588 | zfcp_port_put(port); |