]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/s390/scsi/zfcp_ccw.c
[S390] cio: introduce notifier for boxed state
[linux-2.6-omap-h63xx.git] / drivers / s390 / scsi / zfcp_ccw.c
index 728147131e1d426801198bde6ca10cda10141a9c..cfb0dcb6e3ff365354c85238c861140f60987577 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Registration and callback for the s390 common I/O layer.
  *
- * Copyright IBM Corporation 2002, 2008
+ * Copyright IBM Corporation 2002, 2009
  */
 
 #define KMSG_COMPONENT "zfcp"
@@ -72,8 +72,7 @@ static void zfcp_ccw_remove(struct ccw_device *ccw_device)
 
        list_for_each_entry_safe(port, p, &port_remove_lh, list) {
                list_for_each_entry_safe(unit, u, &unit_remove_lh, list) {
-                       if (atomic_read(&unit->status) &
-                           ZFCP_STATUS_UNIT_REGISTERED)
+                       if (unit->device)
                                scsi_remove_device(unit->device);
                        zfcp_unit_dequeue(unit);
                }
@@ -106,25 +105,20 @@ static int zfcp_ccw_set_online(struct ccw_device *ccw_device)
        if (retval)
                goto out;
 
-       retval = zfcp_adapter_scsi_register(adapter);
-       if (retval)
-               goto out_scsi_register;
-
        /* initialize request counter */
        BUG_ON(!zfcp_reqlist_isempty(adapter));
        adapter->req_no = 0;
+       zfcp_fc_nameserver_init(adapter);
 
-       zfcp_erp_modify_adapter_status(adapter, 10, NULL,
+       zfcp_erp_modify_adapter_status(adapter, "ccsonl1", NULL,
                                       ZFCP_STATUS_COMMON_RUNNING, ZFCP_SET);
-       zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED, 85,
-                               NULL);
+       zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED,
+                               "ccsonl2", NULL);
        zfcp_erp_wait(adapter);
        up(&zfcp_data.config_sema);
        flush_work(&adapter->scan_work);
        return 0;
 
- out_scsi_register:
-       zfcp_erp_thread_kill(adapter);
  out:
        up(&zfcp_data.config_sema);
        return retval;
@@ -143,7 +137,7 @@ static int zfcp_ccw_set_offline(struct ccw_device *ccw_device)
 
        down(&zfcp_data.config_sema);
        adapter = dev_get_drvdata(&ccw_device->dev);
-       zfcp_erp_adapter_shutdown(adapter, 0, 86, NULL);
+       zfcp_erp_adapter_shutdown(adapter, 0, "ccsoff1", NULL);
        zfcp_erp_wait(adapter);
        zfcp_erp_thread_kill(adapter);
        up(&zfcp_data.config_sema);
@@ -166,21 +160,26 @@ static int zfcp_ccw_notify(struct ccw_device *ccw_device, int event)
        case CIO_GONE:
                dev_warn(&adapter->ccw_device->dev,
                         "The FCP device has been detached\n");
-               zfcp_erp_adapter_shutdown(adapter, 0, 87, NULL);
+               zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti1", NULL);
                break;
        case CIO_NO_PATH:
                dev_warn(&adapter->ccw_device->dev,
                         "The CHPID for the FCP device is offline\n");
-               zfcp_erp_adapter_shutdown(adapter, 0, 88, NULL);
+               zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti2", NULL);
                break;
        case CIO_OPER:
                dev_info(&adapter->ccw_device->dev,
                         "The FCP device is operational again\n");
-               zfcp_erp_modify_adapter_status(adapter, 11, NULL,
+               zfcp_erp_modify_adapter_status(adapter, "ccnoti3", NULL,
                                               ZFCP_STATUS_COMMON_RUNNING,
                                               ZFCP_SET);
                zfcp_erp_adapter_reopen(adapter, ZFCP_STATUS_COMMON_ERP_FAILED,
-                                       89, NULL);
+                                       "ccnoti4", NULL);
+               break;
+       case CIO_BOXED:
+               dev_warn(&adapter->ccw_device->dev,
+                        "The ccw device did not respond in time.\n");
+               zfcp_erp_adapter_shutdown(adapter, 0, "ccnoti5", NULL);
                break;
        }
        return 1;
@@ -196,7 +195,7 @@ static void zfcp_ccw_shutdown(struct ccw_device *cdev)
 
        down(&zfcp_data.config_sema);
        adapter = dev_get_drvdata(&cdev->dev);
-       zfcp_erp_adapter_shutdown(adapter, 0, 90, NULL);
+       zfcp_erp_adapter_shutdown(adapter, 0, "ccshut1", NULL);
        zfcp_erp_wait(adapter);
        up(&zfcp_data.config_sema);
 }