[SCSI] zfcp: Move qdio related data out of zfcp_adapter
[deliverable/linux.git] / drivers / s390 / scsi / zfcp_aux.c
index f785cbc7520ddad15ae343966582c78a8483c27a..ed7211ef04eb829e5531e8843a698ed7656e0c17 100644 (file)
@@ -428,7 +428,7 @@ static void zfcp_free_low_mem_buffers(struct zfcp_adapter *adapter)
 int zfcp_status_read_refill(struct zfcp_adapter *adapter)
 {
        while (atomic_read(&adapter->stat_miss) > 0)
-               if (zfcp_fsf_status_read(adapter)) {
+               if (zfcp_fsf_status_read(adapter->qdio)) {
                        if (atomic_read(&adapter->stat_miss) >= 16) {
                                zfcp_erp_adapter_reopen(adapter, 0, "axsref1",
                                                        NULL);
@@ -507,11 +507,16 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
                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))
+       if (zfcp_qdio_allocate(adapter->qdio, ccw_device))
                goto qdio_allocate_failed;
 
        if (zfcp_allocate_low_mem_buffers(adapter))
@@ -536,8 +541,8 @@ int zfcp_adapter_enqueue(struct ccw_device *ccw_device)
 
        spin_lock_init(&adapter->req_list_lock);
 
-       spin_lock_init(&adapter->req_q_lock);
-       spin_lock_init(&adapter->qdio_stat_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);
@@ -574,7 +579,9 @@ debug_register_failed:
 failed_low_mem_buffers:
        zfcp_free_low_mem_buffers(adapter);
 qdio_allocate_failed:
-       zfcp_qdio_free(adapter);
+       zfcp_qdio_free(adapter->qdio);
+       kfree(adapter->qdio);
+qdio_mem_failed:
        kfree(adapter);
        return -ENOMEM;
 }
@@ -605,12 +612,13 @@ void zfcp_adapter_dequeue(struct zfcp_adapter *adapter)
 
        zfcp_destroy_adapter_work_queue(adapter);
        zfcp_adapter_debug_unregister(adapter);
-       zfcp_qdio_free(adapter);
+       zfcp_qdio_free(adapter->qdio);
        zfcp_free_low_mem_buffers(adapter);
        kfree(adapter->req_list);
        kfree(adapter->fc_stats);
        kfree(adapter->stats_reset_data);
        kfree(adapter->gs);
+       kfree(adapter->qdio);
        kfree(adapter);
 }
 
This page took 0.030464 seconds and 5 git commands to generate.