zfcp_erp_port_reopen(unit->port, 0); 
zfcp_test_link(unit->port); 
zfcp_fsf_close_unit_handler(struct zfcp_fsf_req *fsf_req){	int retval = -EINVAL;	struct zfcp_unit *unit;	unit = fsf_req->data.close_unit.unit;	/* restore unit */	if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR) {		/* don't change unit status in our bookkeeping */		goto skip_fsfstatus;	}	/* evaluate FSF status in QTCB */	switch (fsf_req->qtcb->header.fsf_status) {	case FSF_PORT_HANDLE_NOT_VALID:		ZFCP_LOG_INFO("Temporary port identifier 0x%x for port "			      "0x%016Lx on adapter %s invalid. This may "			      "happen in rare circumstances\n",			      unit->port->handle,			      unit->port->wwpn,			      zfcp_get_busid_by_unit(unit));		ZFCP_LOG_DEBUG("status qualifier:\n");		ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_DEBUG,			      (char *) &fsf_req->qtcb->header.fsf_status_qual,			      sizeof (union fsf_status_qual));		debug_text_event(fsf_req->adapter->erp_dbf, 1,				 "fsf_s_phand_nv");		zfcp_erp_adapter_reopen(unit->port->adapter, 0);		zfcp_cmd_dbf_event_fsf("porthinv", fsf_req,				       &fsf_req->qtcb->header.fsf_status_qual,				       sizeof (union fsf_status_qual));		fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;		break;	case FSF_LUN_HANDLE_NOT_VALID:		ZFCP_LOG_INFO("Temporary LUN identifier 0x%x of unit "			      "0x%016Lx on port 0x%016Lx on adapter %s is "			      "invalid. This may happen occasionally.\n",			      unit->handle,			      unit->fcp_lun,			      unit->port->wwpn,			      zfcp_get_busid_by_unit(unit));		ZFCP_LOG_DEBUG("Status qualifier data:\n");		ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_DEBUG,			      (char *) &fsf_req->qtcb->header.fsf_status_qual,			      sizeof (union fsf_status_qual));		debug_text_event(fsf_req->adapter->erp_dbf, 1,				 "fsf_s_lhand_nv");		zfcp_erp_port_reopen(unit->port, 0);		zfcp_cmd_dbf_event_fsf("lunhinv", fsf_req,				       &fsf_req->qtcb->header.fsf_status_qual,				       sizeof (union fsf_status_qual));		fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;		break;	case FSF_PORT_BOXED:		ZFCP_LOG_DEBUG("The remote port 0x%016Lx on adapter %s "			       "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);		fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR |			ZFCP_STATUS_FSFREQ_RETRY;		break;	case FSF_ADAPTER_STATUS_AVAILABLE:		switch (fsf_req->qtcb->header.fsf_status_qual.word[0]) {		case FSF_SQ_INVOKE_LINK_TEST_PROCEDURE:			/* re-establish link to port */			debug_text_event(fsf_req->adapter->erp_dbf, 1,					 "fsf_sq_ltest");			zfcp_erp_port_reopen(unit->port, 0);			fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;			break;		case FSF_SQ_ULP_DEPENDENT_ERP_REQUIRED:			/* ERP strategy will escalate */			debug_text_event(fsf_req->adapter->erp_dbf, 1,					 "fsf_sq_ulp");			fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR;			break;		default:			ZFCP_LOG_NORMAL			    ("bug: Wrong status qualifier 0x%x arrived.\n",			     fsf_req->qtcb->header.fsf_status_qual.word[0]);			debug_text_event(fsf_req->adapter->erp_dbf, 0,					 "fsf_sq_inval:");			debug_exception(				fsf_req->adapter->erp_dbf, 0,				&fsf_req->qtcb->header.fsf_status_qual.word[0],				sizeof (u32));			break;		}		break;	case FSF_GOOD:		ZFCP_LOG_TRACE("unit 0x%016Lx on port 0x%016Lx on adapter %s "			       "closed, port handle 0x%x\n",			       unit->fcp_lun,			       unit->port->wwpn,			       zfcp_get_busid_by_unit(unit),			       unit->handle);		/* mark unit as closed */		atomic_clear_mask(ZFCP_STATUS_COMMON_OPEN, &unit->status);		retval = 0;		break;	default:		ZFCP_LOG_NORMAL("bug: An unknown FSF Status was presented "				"(debug info 0x%x)\n",				fsf_req->qtcb->header.fsf_status);		debug_text_event(fsf_req->adapter->erp_dbf, 0, "fsf_s_inval:");		debug_exception(fsf_req->adapter->erp_dbf, 0,				&fsf_req->qtcb->header.fsf_status,				sizeof (u32));		break;	} skip_fsfstatus:	atomic_clear_mask(ZFCP_STATUS_COMMON_CLOSING, &unit->status);	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/65a8d4e1a3754f0bfaa62949ebe919930e3127a1/zfcp_fsf.c/clean/drivers/s390/scsi/zfcp_fsf.c