[SCSI] zfcp: introduce _setup, _destroy for qdio and FC
authorSwen Schillig <swen@vnet.ibm.com>
Tue, 18 Aug 2009 13:43:22 +0000 (15:43 +0200)
committerJames Bottomley <James.Bottomley@suse.de>
Sat, 5 Sep 2009 13:49:32 +0000 (08:49 -0500)
Extract independent data structures and introduce common _setup and
_destroy routines for QDIO and Fibre Channel related data structures

Signed-off-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>
drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_ext.h
drivers/s390/scsi/zfcp_fc.c
drivers/s390/scsi/zfcp_qdio.c

index 7a50f64..c77686e 100644 (file)
@@ -506,30 +506,18 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
        if (!adapter)
                return -ENOMEM;
 
-       adapter->gs = kzalloc(sizeof(struct zfcp_wka_ports), GFP_KERNEL);
-       if (!adapter->gs) {
-               kfree(adapter);
-               return -ENOMEM;
-       }
-
-       adapter->qdio = kzalloc(sizeof(struct zfcp_qdio), GFP_KERNEL);
-       if (!adapter->qdio)
-               goto qdio_mem_failed;
-
-       adapter->qdio->adapter = adapter;
-
        ccw_device->handler = NULL;
        adapter->ccw_device = ccw_device;
        atomic_set(&adapter->refcount, 0);
 
-       if (zfcp_qdio_allocate(adapter->qdio, ccw_device))
-               goto qdio_allocate_failed;
+       if (zfcp_qdio_setup(adapter))
+               goto qdio_failed;
 
        if (zfcp_allocate_low_mem_buffers(adapter))
-               goto failed_low_mem_buffers;
+               goto low_mem_buffers_failed;
 
        if (zfcp_reqlist_alloc(adapter))
-               goto failed_low_mem_buffers;
+               goto low_mem_buffers_failed;
 
        if (zfcp_dbf_adapter_register(adapter))
                goto debug_register_failed;
@@ -537,6 +525,9 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
        if (zfcp_setup_adapter_work_queue(adapter))
                goto work_queue_failed;
 
+       if (zfcp_fc_gs_setup(adapter))
+               goto generic_services_failed;
+
        init_waitqueue_head(&adapter->remove_wq);
        init_waitqueue_head(&adapter->erp_thread_wqh);
        init_waitqueue_head(&adapter->erp_done_wqh);
@@ -547,9 +538,6 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
 
        spin_lock_init(&adapter->req_list_lock);
 
-       spin_lock_init(&adapter->qdio->req_q_lock);
-       spin_lock_init(&adapter->qdio->stat_lock);
-
        rwlock_init(&adapter->erp_lock);
        rwlock_init(&adapter->abort_lock);
 
@@ -570,24 +558,23 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
                goto sysfs_failed;
 
        atomic_clear_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
-       zfcp_fc_wka_ports_init(adapter);
 
        if (!zfcp_adapter_scsi_register(adapter))
                return 0;
 
 sysfs_failed:
+       zfcp_fc_gs_destroy(adapter);
+generic_services_failed:
        zfcp_destroy_adapter_work_queue(adapter);
 work_queue_failed:
        zfcp_dbf_adapter_unregister(adapter->dbf);
 debug_register_failed:
        dev_set_drvdata(&ccw_device->dev, NULL);
        kfree(adapter->req_list);
-failed_low_mem_buffers:
+low_mem_buffers_failed:
        zfcp_free_low_mem_buffers(adapter);
-qdio_allocate_failed:
-       zfcp_qdio_free(adapter->qdio);
-       kfree(adapter->qdio);
-qdio_mem_failed:
+qdio_failed:
+       zfcp_qdio_destroy(adapter->qdio);
        kfree(adapter);
        return -ENOMEM;
 }
@@ -616,15 +603,14 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
        if (!retval)
                return;
 
+       zfcp_fc_gs_destroy(adapter);
        zfcp_destroy_adapter_work_queue(adapter);
        zfcp_dbf_adapter_unregister(adapter->dbf);
-       zfcp_qdio_free(adapter->qdio);
        zfcp_free_low_mem_buffers(adapter);
+       zfcp_qdio_destroy(adapter->qdio);
        kfree(adapter->req_list);
        kfree(adapter->fc_stats);
        kfree(adapter->stats_reset_data);
-       kfree(adapter->gs);
-       kfree(adapter->qdio);
        kfree(adapter);
 }
 
index a49d009..cf09b28 100644 (file)
@@ -100,7 +100,8 @@ extern void zfcp_fc_plogi_evaluate(struct zfcp_port *, struct fsf_plogi *);
 extern void zfcp_test_link(struct zfcp_port *);
 extern void zfcp_fc_link_test_work(struct work_struct *);
 extern void zfcp_fc_wka_ports_force_offline(struct zfcp_wka_ports *);
-extern void zfcp_fc_wka_ports_init(struct zfcp_adapter *);
+extern int zfcp_fc_gs_setup(struct zfcp_adapter *);
+extern void zfcp_fc_gs_destroy(struct zfcp_adapter *);
 extern int zfcp_fc_execute_els_fc_job(struct fc_bsg_job *);
 extern int zfcp_fc_execute_ct_fc_job(struct fc_bsg_job *);
 
@@ -134,8 +135,8 @@ extern struct zfcp_fsf_req *zfcp_fsf_abort_fcp_command(unsigned long,
 extern void zfcp_fsf_reqid_check(struct zfcp_qdio *, int);
 
 /* zfcp_qdio.c */
-extern int zfcp_qdio_allocate(struct zfcp_qdio *, struct ccw_device *);
-extern void zfcp_qdio_free(struct zfcp_qdio *);
+extern int zfcp_qdio_setup(struct zfcp_adapter *);
+extern void zfcp_qdio_destroy(struct zfcp_qdio *);
 extern int zfcp_qdio_send(struct zfcp_qdio *, struct zfcp_queue_req *);
 extern struct qdio_buffer_element
        *zfcp_qdio_sbale_req(struct zfcp_qdio *, struct zfcp_queue_req *);
Simple merge
Simple merge