]> Pileus Git - ~andy/linux/blobdiff - drivers/s390/scsi/zfcp_fsf.c
Pull ngam-maule-steiner into release branch
[~andy/linux] / drivers / s390 / scsi / zfcp_fsf.c
index 56b2ea97da1f3e12488e885dafb91f26981ebc9d..c007b6424e746cd63854ca8b69bfefbddcfc5802 100644 (file)
@@ -1228,7 +1228,7 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req)
                              zfcp_get_busid_by_unit(unit));
                debug_text_event(new_fsf_req->adapter->erp_dbf, 2,
                                 "fsf_s_pboxed");
-               zfcp_erp_port_reopen(unit->port, 0);
+               zfcp_erp_port_boxed(unit->port);
                new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR
                    | ZFCP_STATUS_FSFREQ_RETRY;
                break;
@@ -1240,10 +1240,7 @@ zfcp_fsf_abort_fcp_command_handler(struct zfcp_fsf_req *new_fsf_req)
                         unit->fcp_lun, unit->port->wwpn,
                         zfcp_get_busid_by_unit(unit));
                 debug_text_event(new_fsf_req->adapter->erp_dbf, 1, "fsf_s_lboxed");
-                zfcp_erp_unit_reopen(unit, 0);
-                zfcp_cmd_dbf_event_fsf("unitbox", new_fsf_req,
-                        &new_fsf_req->qtcb->header.fsf_status_qual,
-                        sizeof(union fsf_status_qual));
+               zfcp_erp_unit_boxed(unit);
                 new_fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR
                         | ZFCP_STATUS_FSFREQ_RETRY;
                 break;
@@ -1573,7 +1570,7 @@ zfcp_fsf_send_ct_handler(struct zfcp_fsf_req *fsf_req)
                              "(adapter %s, port d_id=0x%08x)\n",
                              zfcp_get_busid_by_port(port), port->d_id);
                debug_text_event(adapter->erp_dbf, 2, "fsf_s_pboxed");
-               zfcp_erp_port_reopen(port, 0);
+               zfcp_erp_port_boxed(port);
                fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR
                    | ZFCP_STATUS_FSFREQ_RETRY;
                break;
@@ -2065,6 +2062,7 @@ zfcp_fsf_exchange_config_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok)
                zfcp_erp_adapter_shutdown(adapter, 0);
                return -EIO;
        }
+       zfcp_set_fc_host_attrs(adapter);
        return 0;
 }
 
@@ -2460,6 +2458,9 @@ zfcp_fsf_open_port_handler(struct zfcp_fsf_req *fsf_req)
                /* mark port as open */
                atomic_set_mask(ZFCP_STATUS_COMMON_OPEN |
                                ZFCP_STATUS_PORT_PHYS_OPEN, &port->status);
+               atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
+                                 ZFCP_STATUS_COMMON_ACCESS_BOXED,
+                                 &port->status);
                retval = 0;
                /* check whether D_ID has changed during open */
                /*
@@ -2803,7 +2804,7 @@ zfcp_fsf_close_physical_port_handler(struct zfcp_fsf_req *fsf_req)
                               port->wwpn,
                               zfcp_get_busid_by_port(port));
                debug_text_event(fsf_req->adapter->erp_dbf, 1, "fsf_s_pboxed");
-               zfcp_erp_port_reopen(port, 0);
+               zfcp_erp_port_boxed(port);
                fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
                        ZFCP_STATUS_FSFREQ_RETRY;
                break;
@@ -3035,7 +3036,7 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req)
                               "needs to be reopened\n",
                               unit->port->wwpn, zfcp_get_busid_by_unit(unit));
                debug_text_event(adapter->erp_dbf, 2, "fsf_s_pboxed");
-               zfcp_erp_port_reopen(unit->port, 0);
+               zfcp_erp_port_boxed(unit->port);
                fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
                        ZFCP_STATUS_FSFREQ_RETRY;
                break;
@@ -3145,7 +3146,9 @@ zfcp_fsf_open_unit_handler(struct zfcp_fsf_req *fsf_req)
                               unit->handle);
                /* mark unit as open */
                atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &unit->status);
-
+               atomic_clear_mask(ZFCP_STATUS_COMMON_ACCESS_DENIED |
+                                 ZFCP_STATUS_COMMON_ACCESS_BOXED,
+                                 &unit->status);
                if (adapter->supported_features & FSF_FEATURE_LUN_SHARING){
                        if (!exclusive)
                                atomic_set_mask(ZFCP_STATUS_UNIT_SHARED,
@@ -3335,7 +3338,7 @@ zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *fsf_req)
                               unit->port->wwpn,
                               zfcp_get_busid_by_unit(unit));
                debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_pboxed");
-               zfcp_erp_port_reopen(unit->port, 0);
+               zfcp_erp_port_boxed(unit->port);
                fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
                        ZFCP_STATUS_FSFREQ_RETRY;
                break;
@@ -3881,10 +3884,7 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req)
                               "needs to be reopened\n",
                               unit->port->wwpn, zfcp_get_busid_by_unit(unit));
                debug_text_event(fsf_req->adapter->erp_dbf, 2, "fsf_s_pboxed");
-               zfcp_erp_port_reopen(unit->port, 0);
-               zfcp_cmd_dbf_event_fsf("portbox", fsf_req,
-                                      &header->fsf_status_qual,
-                                      sizeof (union fsf_status_qual));
+               zfcp_erp_port_boxed(unit->port);
                fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |
                        ZFCP_STATUS_FSFREQ_RETRY;
                break;
@@ -3895,10 +3895,7 @@ zfcp_fsf_send_fcp_command_handler(struct zfcp_fsf_req *fsf_req)
                                zfcp_get_busid_by_unit(unit),
                                unit->port->wwpn, unit->fcp_lun);
                debug_text_event(fsf_req->adapter->erp_dbf, 1, "fsf_s_lboxed");
-               zfcp_erp_unit_reopen(unit, 0);
-               zfcp_cmd_dbf_event_fsf("unitbox", fsf_req,
-                                      &header->fsf_status_qual,
-                                      sizeof(union fsf_status_qual));
+               zfcp_erp_unit_boxed(unit);
                fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR
                        | ZFCP_STATUS_FSFREQ_RETRY;
                break;