ZFCP_LOG_NORMAL("bug: no old fsf request found\n"); ZFCP_LOG_NORMAL("scsi_cmnd:\n"); ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_NORMAL, (char *) scpnt, sizeof (struct scsi_cmnd)); retval = FAILED; 
zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, new_fsf_req); retval = SUCCESS; 
zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt){ 	struct Scsi_Host *scsi_host; 	struct zfcp_adapter *adapter;	struct zfcp_unit *unit;	int retval = SUCCESS;	struct zfcp_fsf_req *new_fsf_req, *old_fsf_req;	unsigned long flags;	scsi_host = scpnt->device->host;	adapter = (struct zfcp_adapter *) scsi_host->hostdata[0];	unit = (struct zfcp_unit *) scpnt->device->hostdata;	ZFCP_LOG_INFO("aborting scsi_cmnd=%p on adapter %s\n",		      scpnt, zfcp_get_busid_by_adapter(adapter));	/* avoid race condition between late normal completion and abort */	write_lock_irqsave(&adapter->abort_lock, flags);	/*	 * Check whether command has just completed and can not be aborted.	 * Even if the command has just been completed late, we can access	 * scpnt since the SCSI stack does not release it at least until	 * this routine returns. (scpnt is parameter passed to this routine	 * and must not disappear during abort even on late completion.)	 */	old_fsf_req = (struct zfcp_fsf_req *) scpnt->host_scribble;	if (!old_fsf_req) {		write_unlock_irqrestore(&adapter->abort_lock, flags);		ZFCP_LOG_NORMAL("bug: no old fsf request found\n");		ZFCP_LOG_NORMAL("scsi_cmnd:\n");		ZFCP_HEX_DUMP(ZFCP_LOG_LEVEL_NORMAL,			      (char *) scpnt, sizeof (struct scsi_cmnd));		retval = FAILED;		goto out;	}	old_fsf_req->data = 0;	old_fsf_req->status |= ZFCP_STATUS_FSFREQ_ABORTING;	/* don't access old_fsf_req after releasing the abort_lock */	write_unlock_irqrestore(&adapter->abort_lock, flags);	/* call FSF routine which does the abort */	new_fsf_req = zfcp_fsf_abort_fcp_command((unsigned long) old_fsf_req,						 adapter, unit, 0);	if (!new_fsf_req) {		retval = FAILED;		ZFCP_LOG_NORMAL("error: initiation of Abort FCP Cmnd "				"failed\n");		goto out;	}	/* wait for completion of abort */	__wait_event(new_fsf_req->completion_wq,		     new_fsf_req->status & ZFCP_STATUS_FSFREQ_COMPLETED);	zfcp_fsf_req_free(new_fsf_req);	/* status should be valid since signals were not permitted */	if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED) {		retval = SUCCESS;	} else if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED) {		retval = SUCCESS;	} else {		retval = FAILED;	} out:	return retval;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/8a36e4532ea10471f0a8605207d071361d7be2c3/zfcp_scsi.c/clean/drivers/s390/scsi/zfcp_scsi.c