int rc; struct Scsi_Host *scsi_host = scpnt->device->host; spin_lock_irq(scsi_host->host_lock); rc = __zfcp_scsi_eh_abort_handler(scpnt); spin_unlock_irq(scsi_host->host_lock); return rc; 
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; 
zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt){	int rc;	struct Scsi_Host *scsi_host = scpnt->device->host;	spin_lock_irq(scsi_host->host_lock);	rc = __zfcp_scsi_eh_abort_handler(scpnt);	spin_unlock_irq(scsi_host->host_lock);	return rc;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/059c97d0434834d291eff94669ca2dd3eaac9d28/zfcp_scsi.c/clean/drivers/s390/scsi/zfcp_scsi.c