[SCSI] zfcp: Remove some port flags
authorChristof Schmitt <christof.schmitt@de.ibm.com>
Mon, 2 Mar 2009 12:08:54 +0000 (13:08 +0100)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 12 Mar 2009 17:58:18 +0000 (12:58 -0500)
PORT_PHYS_CLOSING is only set and cleared, but not actually used
for status checking.

PORT_INVALID_WWPN is set when the GID_PN request does not return
a d_id for a remote port, e.g. when a remote port has been
unplugged. For this case, the d_id is zero. In the erp we can
check the d_id and use the normal escalation procedure that gives
up after three retries and remove the special case.

PORT_NO_WWPN is unused: Each port in the remote port list has a
valid wwpn. The WKA ports are now tracked outside the port
list. Remove the PORT_NO_WWPN flag, since this is no longer set
for any port.

Acked-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/s390/scsi/zfcp_aux.c
drivers/s390/scsi/zfcp_def.h
drivers/s390/scsi/zfcp_erp.c
drivers/s390/scsi/zfcp_fc.c
drivers/s390/scsi/zfcp_fsf.c

index 8af7dfbe022c6df0412039580c1351399ff89a12..497986f6d643897783078deae9cf16485a561624 100644 (file)
@@ -249,8 +249,8 @@ struct zfcp_port *zfcp_get_port_by_wwpn(struct zfcp_adapter *adapter,
        struct zfcp_port *port;
 
        list_for_each_entry(port, &adapter->port_list_head, list)
-               if ((port->wwpn == wwpn) && !(atomic_read(&port->status) &
-                     (ZFCP_STATUS_PORT_NO_WWPN | ZFCP_STATUS_COMMON_REMOVE)))
+               if ((port->wwpn == wwpn) &&
+                   !(atomic_read(&port->status) & ZFCP_STATUS_COMMON_REMOVE))
                        return port;
        return NULL;
 }
@@ -620,11 +620,10 @@ struct zfcp_port *zfcp_port_enqueue(struct zfcp_adapter *adapter, u64 wwpn,
        dev_set_drvdata(&port->sysfs_device, port);
 
        read_lock_irq(&zfcp_data.config_lock);
-       if (!(status & ZFCP_STATUS_PORT_NO_WWPN))
-               if (zfcp_get_port_by_wwpn(adapter, wwpn)) {
-                       read_unlock_irq(&zfcp_data.config_lock);
-                       goto err_out_free;
-               }
+       if (zfcp_get_port_by_wwpn(adapter, wwpn)) {
+               read_unlock_irq(&zfcp_data.config_lock);
+               goto err_out_free;
+       }
        read_unlock_irq(&zfcp_data.config_lock);
 
        if (device_register(&port->sysfs_device))
index 510662783a6f5dfb63b4d755dc75032ed47e8a97..62f9ee58c9b8925207a6b2a48e87d4a6aa9a5268 100644 (file)
@@ -243,9 +243,6 @@ struct zfcp_ls_adisc {
 
 /* remote port status */
 #define ZFCP_STATUS_PORT_PHYS_OPEN             0x00000001
-#define ZFCP_STATUS_PORT_PHYS_CLOSING          0x00000004
-#define ZFCP_STATUS_PORT_NO_WWPN               0x00000008
-#define ZFCP_STATUS_PORT_INVALID_WWPN          0x00000020
 
 /* well known address (WKA) port status*/
 enum zfcp_wka_status {
index 387a3af528acdb6d1bf2fe24adeb78802d78c047..aed08e70aa96c298090a3cda9ac4ca4ded34519d 100644 (file)
@@ -777,10 +777,7 @@ static int zfcp_erp_port_forced_strategy_close(struct zfcp_erp_action *act)
 
 static void zfcp_erp_port_strategy_clearstati(struct zfcp_port *port)
 {
-       atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
-                         ZFCP_STATUS_PORT_PHYS_CLOSING |
-                         ZFCP_STATUS_PORT_INVALID_WWPN,
-                         &port->status);
+       atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED, &port->status);
 }
 
 static int zfcp_erp_port_forced_strategy(struct zfcp_erp_action *erp_action)
@@ -875,13 +872,8 @@ static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
                        return ZFCP_ERP_CONTINUES;
                }
        case ZFCP_ERP_STEP_NAMESERVER_LOOKUP:
-               if (!port->d_id) {
-                       if (p_status & (ZFCP_STATUS_PORT_INVALID_WWPN)) {
-                               zfcp_erp_port_failed(port, 26, NULL);
-                               return ZFCP_ERP_EXIT;
-                       }
+               if (!port->d_id)
                        return ZFCP_ERP_FAILED;
-               }
                return zfcp_erp_port_strategy_open_port(act);
 
        case ZFCP_ERP_STEP_PORT_OPENING:
@@ -1269,10 +1261,6 @@ static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
 
        case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED:
        case ZFCP_ERP_ACTION_REOPEN_PORT:
-               if (atomic_read(&port->status) & ZFCP_STATUS_PORT_NO_WWPN) {
-                       zfcp_port_put(port);
-                       return;
-               }
                if ((result == ZFCP_ERP_SUCCEEDED) && !port->rport)
                        zfcp_erp_rport_register(port);
                if ((result != ZFCP_ERP_SUCCEEDED) && port->rport) {
index eabdfe24456e4056585769bf09fbe4d4af7e849f..67e6b7177870ffb5d77e4035ce7a2eb3a48f240e 100644 (file)
@@ -259,10 +259,9 @@ static void zfcp_fc_ns_gid_pn_eval(unsigned long data)
 
        if (ct->status)
                return;
-       if (ct_iu_resp->header.cmd_rsp_code != ZFCP_CT_ACCEPT) {
-               atomic_set_mask(ZFCP_STATUS_PORT_INVALID_WWPN, &port->status);
+       if (ct_iu_resp->header.cmd_rsp_code != ZFCP_CT_ACCEPT)
                return;
-       }
+
        /* paranoia */
        if (ct_iu_req->wwpn != port->wwpn)
                return;
index babe1b8ba25edbf0d523d02a3378bf5761b0b9a5..638cd5a2919d5a24413d1479388198cc5ab190a6 100644 (file)
@@ -1712,7 +1712,7 @@ static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req)
        struct zfcp_unit *unit;
 
        if (req->status & ZFCP_STATUS_FSFREQ_ERROR)
-               goto skip_fsfstatus;
+               return;
 
        switch (header->fsf_status) {
        case FSF_PORT_HANDLE_NOT_VALID:
@@ -1752,8 +1752,6 @@ static void zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *req)
                                          &unit->status);
                break;
        }
-skip_fsfstatus:
-       atomic_clear_mask(ZFCP_STATUS_PORT_PHYS_CLOSING, &port->status);
 }
 
 /**
@@ -1789,8 +1787,6 @@ int zfcp_fsf_close_physical_port(struct zfcp_erp_action *erp_action)
        req->erp_action = erp_action;
        req->handler = zfcp_fsf_close_physical_port_handler;
        erp_action->fsf_req = req;
-       atomic_set_mask(ZFCP_STATUS_PORT_PHYS_CLOSING,
-                       &erp_action->port->status);
 
        zfcp_fsf_start_erp_timer(req);
        retval = zfcp_fsf_req_send(req);