aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi
diff options
context:
space:
mode:
authorChristof Schmitt <christof.schmitt@de.ibm.com>2008-12-19 10:56:55 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-12-29 12:24:36 -0500
commitb228af0269eaf1af22dbae12a0860f8dbfd63662 (patch)
treeb8605995801a890d9c213e0ef1c3de63a4b4c312 /drivers/s390/scsi
parentdedbc2b3cb8404c618975bd2811c7605a4ccb51e (diff)
[SCSI] zfcp: Remove adapter list
After the latest changes, the list of FCP devices is only used to lookup the adapter for requests from the actcli tool. Change this to use the lookup function in the cio layer. Now we can remove the adapter list and have one place less to use the global config_lock. Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Acked-by: Felix Beck <felix@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r--drivers/s390/scsi/zfcp_aux.c12
-rw-r--r--drivers/s390/scsi/zfcp_cfdc.c17
-rw-r--r--drivers/s390/scsi/zfcp_def.h2
3 files changed, 3 insertions, 28 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c
index f0f49feaa34f..d7d3148d15e2 100644
--- a/drivers/s390/scsi/zfcp_aux.c
+++ b/drivers/s390/scsi/zfcp_aux.c
@@ -181,7 +181,6 @@ static int __init zfcp_module_init(void)
181 181
182 zfcp_data.work_queue = create_singlethread_workqueue("zfcp_wq"); 182 zfcp_data.work_queue = create_singlethread_workqueue("zfcp_wq");
183 183
184 INIT_LIST_HEAD(&zfcp_data.adapter_list_head);
185 sema_init(&zfcp_data.config_sema, 1); 184 sema_init(&zfcp_data.config_sema, 1);
186 rwlock_init(&zfcp_data.config_lock); 185 rwlock_init(&zfcp_data.config_lock);
187 186
@@ -527,11 +526,7 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
527 &zfcp_sysfs_adapter_attrs)) 526 &zfcp_sysfs_adapter_attrs))
528 goto sysfs_failed; 527 goto sysfs_failed;
529 528
530 write_lock_irq(&zfcp_data.config_lock);
531 atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status); 529 atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
532 list_add_tail(&adapter->list, &zfcp_data.adapter_list_head);
533 write_unlock_irq(&zfcp_data.config_lock);
534
535 zfcp_fc_nameserver_init(adapter); 530 zfcp_fc_nameserver_init(adapter);
536 531
537 if (!zfcp_adapter_scsi_register(adapter)) 532 if (!zfcp_adapter_scsi_register(adapter))
@@ -574,14 +569,7 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
574 return; 569 return;
575 570
576 zfcp_adapter_debug_unregister(adapter); 571 zfcp_adapter_debug_unregister(adapter);
577
578 /* remove specified adapter data structure from list */
579 write_lock_irq(&zfcp_data.config_lock);
580 list_del(&adapter->list);
581 write_unlock_irq(&zfcp_data.config_lock);
582
583 zfcp_qdio_free(adapter); 572 zfcp_qdio_free(adapter);
584
585 zfcp_free_low_mem_buffers(adapter); 573 zfcp_free_low_mem_buffers(adapter);
586 kfree(adapter->req_list); 574 kfree(adapter->req_list);
587 kfree(adapter->fc_stats); 575 kfree(adapter->fc_stats);
diff --git a/drivers/s390/scsi/zfcp_cfdc.c b/drivers/s390/scsi/zfcp_cfdc.c
index f1a7518e67ed..10cbfd172a28 100644
--- a/drivers/s390/scsi/zfcp_cfdc.c
+++ b/drivers/s390/scsi/zfcp_cfdc.c
@@ -85,20 +85,9 @@ static int zfcp_cfdc_copy_to_user(void __user *user_buffer,
85 85
86static struct zfcp_adapter *zfcp_cfdc_get_adapter(u32 devno) 86static struct zfcp_adapter *zfcp_cfdc_get_adapter(u32 devno)
87{ 87{
88 struct zfcp_adapter *adapter = NULL, *cur_adapter; 88 char busid[9];
89 struct ccw_dev_id dev_id; 89 snprintf(busid, sizeof(busid), "0.0.%04x", devno);
90 90 return zfcp_get_adapter_by_busid(busid);
91 read_lock_irq(&zfcp_data.config_lock);
92 list_for_each_entry(cur_adapter, &zfcp_data.adapter_list_head, list) {
93 ccw_device_get_id(cur_adapter->ccw_device, &dev_id);
94 if (dev_id.devno == devno) {
95 adapter = cur_adapter;
96 zfcp_adapter_get(adapter);
97 break;
98 }
99 }
100 read_unlock_irq(&zfcp_data.config_lock);
101 return adapter;
102} 91}
103 92
104static int zfcp_cfdc_set_fsf(struct zfcp_fsf_cfdc *fsf_cfdc, int command) 93static int zfcp_cfdc_set_fsf(struct zfcp_fsf_cfdc *fsf_cfdc, int command)
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h
index e19e46ae4a68..b95e73ee0d6f 100644
--- a/drivers/s390/scsi/zfcp_def.h
+++ b/drivers/s390/scsi/zfcp_def.h
@@ -451,7 +451,6 @@ struct zfcp_latencies {
451}; 451};
452 452
453struct zfcp_adapter { 453struct zfcp_adapter {
454 struct list_head list; /* list of adapters */
455 atomic_t refcount; /* reference count */ 454 atomic_t refcount; /* reference count */
456 wait_queue_head_t remove_wq; /* can be used to wait for 455 wait_queue_head_t remove_wq; /* can be used to wait for
457 refcount drop to zero */ 456 refcount drop to zero */
@@ -593,7 +592,6 @@ struct zfcp_fsf_req {
593struct zfcp_data { 592struct zfcp_data {
594 struct scsi_host_template scsi_host_template; 593 struct scsi_host_template scsi_host_template;
595 struct scsi_transport_template *scsi_transport_template; 594 struct scsi_transport_template *scsi_transport_template;
596 struct list_head adapter_list_head; /* head of adapter list */
597 rwlock_t config_lock; /* serialises changes 595 rwlock_t config_lock; /* serialises changes
598 to adapter/port/unit 596 to adapter/port/unit
599 lists */ 597 lists */