aac_io_done(scsicmd); 
scsicmd->scsi_done(scsicmd); 
static void io_callback(void *context, struct fib * fibptr){	struct aac_dev *dev;	struct aac_read_reply *readreply;	struct scsi_cmnd *scsicmd;	u32 cid;	scsicmd = (struct scsi_cmnd *) context;	dev = (struct aac_dev *)scsicmd->device->host->hostdata;	cid = ID_LUN_TO_CONTAINER(scsicmd->device->id, scsicmd->device->lun);	if (nblank(dprintk(x))) {		u64 lba;		switch (scsicmd->cmnd[0]) {		case WRITE_6:		case READ_6:			lba = ((scsicmd->cmnd[1] & 0x1F) << 16) |			    (scsicmd->cmnd[2] << 8) | scsicmd->cmnd[3];			break;		case WRITE_16:		case READ_16:			lba = ((u64)scsicmd->cmnd[2] << 56) |			      ((u64)scsicmd->cmnd[3] << 48) |			      ((u64)scsicmd->cmnd[4] << 40) |			      ((u64)scsicmd->cmnd[5] << 32) |			      ((u64)scsicmd->cmnd[6] << 24) |			      (scsicmd->cmnd[7] << 16) |			      (scsicmd->cmnd[8] << 8) | scsicmd->cmnd[9];			break;		case WRITE_12:		case READ_12:			lba = ((u64)scsicmd->cmnd[2] << 24) |			      (scsicmd->cmnd[3] << 16) |			      (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];			break;		default:			lba = ((u64)scsicmd->cmnd[2] << 24) |			       (scsicmd->cmnd[3] << 16) |			       (scsicmd->cmnd[4] << 8) | scsicmd->cmnd[5];			break;		}		printk(KERN_DEBUG		  "io_callback[cpu %d]: lba = %llu, t = %ld.\n",		  smp_processor_id(), (unsigned long long)lba, jiffies);	}	if (fibptr == NULL)		BUG();			if(scsicmd->use_sg)		pci_unmap_sg(dev->pdev, 			(struct scatterlist *)scsicmd->buffer,			scsicmd->use_sg,			scsicmd->sc_data_direction);	else if(scsicmd->request_bufflen)		pci_unmap_single(dev->pdev, scsicmd->SCp.dma_handle,				 scsicmd->request_bufflen,				 scsicmd->sc_data_direction);	readreply = (struct aac_read_reply *)fib_data(fibptr);	if (le32_to_cpu(readreply->status) == ST_OK)		scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_GOOD;	else {#ifdef AAC_DETAILED_STATUS_INFO		printk(KERN_WARNING "io_callback: io failed, status = %d\n",		  le32_to_cpu(readreply->status));#endif		scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 | SAM_STAT_CHECK_CONDITION;		set_sense((u8 *) &dev->fsa_dev[cid].sense_data,				    HARDWARE_ERROR,				    SENCODE_INTERNAL_TARGET_FAILURE,				    ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0,				    0, 0);		memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,		  (sizeof(dev->fsa_dev[cid].sense_data) > sizeof(scsicmd->sense_buffer))		    ? sizeof(scsicmd->sense_buffer)		    : sizeof(dev->fsa_dev[cid].sense_data));	}	fib_complete(fibptr);	fib_free(fibptr);	aac_io_done(scsicmd);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/8e0c5ebde82b08f6d996e11983890fc4cc085fab/aachba.c/buggy/drivers/scsi/aacraid/aachba.c