ZFCP_LOG_FLAGS(2, "FSF_GOOD\n");  
zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *fsf_req){	struct fsf_qtcb_bottom_config *bottom;	struct zfcp_adapter *adapter = fsf_req->adapter;	if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR)		return -EIO;	switch (fsf_req->qtcb->header.fsf_status) {	case FSF_GOOD:		ZFCP_LOG_FLAGS(2, "FSF_GOOD\n");		if (zfcp_fsf_exchange_config_evaluate(fsf_req, 1))			return -EIO;		switch (adapter->fc_topology) {		case FSF_TOPO_P2P:			ZFCP_LOG_FLAGS(1, "FSF_TOPO_P2P\n");			ZFCP_LOG_NORMAL("Point-to-Point fibrechannel "					"configuration detected at adapter %s\n"					"Peer WWNN 0x%016llx, "					"peer WWPN 0x%016llx, "					"peer d_id 0x%06x\n",					zfcp_get_busid_by_adapter(adapter),					adapter->peer_wwnn,					adapter->peer_wwpn,					adapter->peer_d_id);			debug_text_event(fsf_req->adapter->erp_dbf, 0,					 "top-p-to-p");			break;		case FSF_TOPO_AL:			ZFCP_LOG_FLAGS(1, "FSF_TOPO_AL\n");			ZFCP_LOG_NORMAL("error: Arbitrated loop fibrechannel "					"topology detected at adapter %s "					"unsupported, shutting down adapter\n",					zfcp_get_busid_by_adapter(adapter));			debug_text_event(fsf_req->adapter->erp_dbf, 0,					 "top-al");			zfcp_erp_adapter_shutdown(adapter, 0);			return -EIO;		case FSF_TOPO_FABRIC:			ZFCP_LOG_FLAGS(1, "FSF_TOPO_FABRIC\n");			ZFCP_LOG_INFO("Switched fabric fibrechannel "				      "network detected at adapter %s.\n",				      zfcp_get_busid_by_adapter(adapter));			break;		default:			ZFCP_LOG_NORMAL("bug: The fibrechannel topology "					"reported by the exchange "					"configuration command for "					"the adapter %s is not "					"of a type known to the zfcp "					"driver, shutting down adapter\n",					zfcp_get_busid_by_adapter(adapter));			adapter->fc_topology = FSF_TOPO_ERROR;			debug_text_exception(fsf_req->adapter->erp_dbf, 0,					     "unknown-topo");			zfcp_erp_adapter_shutdown(adapter, 0);			return -EIO;		}		bottom = &fsf_req->qtcb->bottom.config;		if (bottom->max_qtcb_size < sizeof(struct fsf_qtcb)) {			ZFCP_LOG_NORMAL("bug: Maximum QTCB size (%d bytes) "					"allowed by the adapter %s "					"is lower than the minimum "					"required by the driver (%ld bytes).\n",					bottom->max_qtcb_size,					zfcp_get_busid_by_adapter(adapter),					sizeof(struct fsf_qtcb));			debug_text_event(fsf_req->adapter->erp_dbf, 0,					 "qtcb-size");			debug_event(fsf_req->adapter->erp_dbf, 0,				    &bottom->max_qtcb_size, sizeof (u32));			zfcp_erp_adapter_shutdown(adapter, 0);			return -EIO;		}		atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK,				&adapter->status);		break;	case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE:		debug_text_event(adapter->erp_dbf, 0, "xchg-inco");		if (zfcp_fsf_exchange_config_evaluate(fsf_req, 0))			return -EIO;		ZFCP_LOG_INFO("Local link to adapter %s is down\n",			      zfcp_get_busid_by_adapter(adapter));		atomic_set_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK |				ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,				&adapter->status);		zfcp_erp_adapter_failed(adapter);		break;	default:		debug_text_event(fsf_req->adapter->erp_dbf, 0, "fsf-stat-ng");		debug_event(fsf_req->adapter->erp_dbf, 0,			    &fsf_req->qtcb->header.fsf_status, sizeof (u32));		zfcp_erp_adapter_shutdown(adapter, 0);		return -EIO;	}	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/6bc9dace767f1fffdf975b3398b3c4e37cd5ae18/zfcp_fsf.c/clean/drivers/s390/scsi/zfcp_fsf.c