retries = ZFCP_EXCHANGE_CONFIG_DATA_RETRIES; 
zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action){	int retval = ZFCP_ERP_SUCCEEDED;	int retries;	struct zfcp_adapter *adapter = erp_action->adapter;	atomic_clear_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK, &adapter->status);	retries = ZFCP_EXCHANGE_CONFIG_DATA_RETRIES;	do {		atomic_clear_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,				  &adapter->status);		ZFCP_LOG_DEBUG("Doing exchange config data\n");		zfcp_erp_action_to_running(erp_action);		zfcp_erp_timeout_init(erp_action);		if (zfcp_fsf_exchange_config_data(erp_action)) {			retval = ZFCP_ERP_FAILED;			debug_text_event(adapter->erp_dbf, 5, "a_fstx_xf");			ZFCP_LOG_INFO("error:  initiation of exchange of "				      "configuration data failed for "				      "adapter %s\n",				      zfcp_get_busid_by_adapter(adapter));			break;		}		debug_text_event(adapter->erp_dbf, 6, "a_fstx_xok");		ZFCP_LOG_DEBUG("Xchange underway\n");		/*		 * Why this works:		 * Both the normal completion handler as well as the timeout		 * handler will do an 'up' when the 'exchange config data'		 * request completes or times out. Thus, the signal to go on		 * won't be lost utilizing this semaphore.		 * Furthermore, this 'adapter_reopen' action is		 * guaranteed to be the only action being there (highest action		 * which prevents other actions from being created).		 * Resulting from that, the wake signal recognized here		 * _must_ be the one belonging to the 'exchange config		 * data' request.		 */		down(&adapter->erp_ready_sem);		if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) {			ZFCP_LOG_INFO("error: exchange of configuration data "				      "for adapter %s timed out\n",				      zfcp_get_busid_by_adapter(adapter));			break;		}		if (atomic_test_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,				     &adapter->status)) {			ZFCP_LOG_DEBUG("host connection still initialising... "				       "waiting and retrying...\n");			/* sleep a little bit before retry */			msleep(jiffies_to_msecs(ZFCP_EXCHANGE_CONFIG_DATA_SLEEP));		}	} while ((retries--) &&		 atomic_test_mask(ZFCP_STATUS_ADAPTER_HOST_CON_INIT,				  &adapter->status));	if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_XCONFIG_OK,			      &adapter->status)) {		ZFCP_LOG_INFO("error: exchange of configuration data for "			      "adapter %s failed\n",			      zfcp_get_busid_by_adapter(adapter));		retval = ZFCP_ERP_FAILED;	}	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/22753fa514aad02342e647ad13048caa282d9238/zfcp_erp.c/clean/drivers/s390/scsi/zfcp_erp.c