Commit a7a53392 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] s390: zfcp host adapter

From: Martin Schwidefsky <schwidefsky@de.ibm.com>

zfcp host adapter change:
 - Prevent infinite retry of SCSI commands when FCP adapter is unavailable.
 - Always queue error recovery structure to the error recovery running list.
 - Add help text to zfcp config option.
parent b42e64d4
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#define ZFCP_CCW_C_REVISION "$Revision: 1.52 $" #define ZFCP_CCW_C_REVISION "$Revision: 1.54 $"
#include <linux/init.h> #include <linux/init.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -232,14 +232,19 @@ zfcp_ccw_notify(struct ccw_device *ccw_device, int event) ...@@ -232,14 +232,19 @@ zfcp_ccw_notify(struct ccw_device *ccw_device, int event)
case CIO_GONE: case CIO_GONE:
ZFCP_LOG_NORMAL("adapter %s: device gone\n", ZFCP_LOG_NORMAL("adapter %s: device gone\n",
zfcp_get_busid_by_adapter(adapter)); zfcp_get_busid_by_adapter(adapter));
debug_text_event(adapter->erp_dbf,1,"dev_gone");
zfcp_erp_adapter_shutdown(adapter, 0);
break; break;
case CIO_NO_PATH: case CIO_NO_PATH:
ZFCP_LOG_NORMAL("adapter %s: no path\n", ZFCP_LOG_NORMAL("adapter %s: no path\n",
zfcp_get_busid_by_adapter(adapter)); zfcp_get_busid_by_adapter(adapter));
debug_text_event(adapter->erp_dbf,1,"no_path");
zfcp_erp_adapter_shutdown(adapter, 0);
break; break;
case CIO_OPER: case CIO_OPER:
ZFCP_LOG_NORMAL("adapter %s: operational again\n", ZFCP_LOG_NORMAL("adapter %s: operational again\n",
zfcp_get_busid_by_adapter(adapter)); zfcp_get_busid_by_adapter(adapter));
debug_text_event(adapter->erp_dbf,1,"dev_oper");
zfcp_erp_modify_adapter_status(adapter, zfcp_erp_modify_adapter_status(adapter,
ZFCP_STATUS_COMMON_RUNNING, ZFCP_STATUS_COMMON_RUNNING,
ZFCP_SET); ZFCP_SET);
...@@ -247,6 +252,7 @@ zfcp_ccw_notify(struct ccw_device *ccw_device, int event) ...@@ -247,6 +252,7 @@ zfcp_ccw_notify(struct ccw_device *ccw_device, int event)
ZFCP_STATUS_COMMON_ERP_FAILED); ZFCP_STATUS_COMMON_ERP_FAILED);
break; break;
} }
zfcp_erp_wait(adapter);
up(&zfcp_data.config_sema); up(&zfcp_data.config_sema);
return 1; return 1;
} }
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#define ZFCP_LOG_AREA ZFCP_LOG_AREA_ERP #define ZFCP_LOG_AREA ZFCP_LOG_AREA_ERP
/* this drivers version (do not edit !!! generated and updated by cvs) */ /* this drivers version (do not edit !!! generated and updated by cvs) */
#define ZFCP_ERP_REVISION "$Revision: 1.51 $" #define ZFCP_ERP_REVISION "$Revision: 1.52 $"
#include "zfcp_ext.h" #include "zfcp_ext.h"
...@@ -2540,6 +2540,7 @@ zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action) ...@@ -2540,6 +2540,7 @@ zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action)
atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
&adapter->status); &adapter->status);
ZFCP_LOG_DEBUG("Doing exchange config data\n"); ZFCP_LOG_DEBUG("Doing exchange config data\n");
zfcp_erp_action_to_running(erp_action);
zfcp_erp_timeout_init(erp_action); zfcp_erp_timeout_init(erp_action);
if (zfcp_fsf_exchange_config_data(erp_action)) { if (zfcp_fsf_exchange_config_data(erp_action)) {
retval = ZFCP_ERP_FAILED; retval = ZFCP_ERP_FAILED;
...@@ -2566,7 +2567,7 @@ zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action) ...@@ -2566,7 +2567,7 @@ zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action)
* _must_ be the one belonging to the 'exchange config * _must_ be the one belonging to the 'exchange config
* data' request. * data' request.
*/ */
down_interruptible(&adapter->erp_ready_sem); down(&adapter->erp_ready_sem);
if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) { if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {
ZFCP_LOG_INFO("error: exchange of configuration data " ZFCP_LOG_INFO("error: exchange of configuration data "
"for adapter %s timed out\n", "for adapter %s timed out\n",
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
*/ */
/* this drivers version (do not edit !!! generated and updated by cvs) */ /* this drivers version (do not edit !!! generated and updated by cvs) */
#define ZFCP_FSF_C_REVISION "$Revision: 1.45 $" #define ZFCP_FSF_C_REVISION "$Revision: 1.46 $"
#include "zfcp_ext.h" #include "zfcp_ext.h"
...@@ -412,7 +412,7 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) ...@@ -412,7 +412,7 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req)
fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;
atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT, atomic_set_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,
&(adapter->status)); &(adapter->status));
debug_text_event(adapter->erp_dbf, 4, "prot_con_init"); debug_text_event(adapter->erp_dbf, 3, "prot_con_init");
break; break;
case FSF_PROT_DUPLICATE_REQUEST_ID: case FSF_PROT_DUPLICATE_REQUEST_ID:
......
...@@ -1736,8 +1736,17 @@ config WD33C93_PIO ...@@ -1736,8 +1736,17 @@ config WD33C93_PIO
# bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI # bool 'Cyberstorm Mk III SCSI support (EXPERIMENTAL)' CONFIG_CYBERSTORMIII_SCSI
config ZFCP config ZFCP
tristate "IBM z900 OpenFCP/SCSI support" tristate "FCP host bus adapter driver for IBM eServer zSeries"
depends on ARCH_S390 && SCSI depends on ARCH_S390 && SCSI
help
If you want to access SCSI devices attached to your IBM eServer
zSeries by means of Fibre Channel interfaces say Y.
For details please refer to the documentation provided by IBM at
<http://oss.software.ibm.com/developerworks/opensource/linux390>
This driver is also available as a module. This module will be
called zfcp. If you want to compile it as a module, say M here
and read Documentation/modules.txt.
endmenu endmenu
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment