if (pc) kfree(pc); if (rq) kfree(rq); if (buf) kfree(buf); 
kfree(buf); kfree(rq); kfree(pc); 
static int idescsi_check_condition(ide_drive_t *drive, struct request *failed_command){	idescsi_scsi_t *scsi = drive_to_idescsi(drive);	idescsi_pc_t   *pc;	struct request *rq;	u8             *buf;	/* stuff a sense request in front of our current request */	pc = kmalloc (sizeof (idescsi_pc_t), GFP_ATOMIC);	rq = kmalloc (sizeof (struct request), GFP_ATOMIC);	buf = kmalloc(SCSI_SENSE_BUFFERSIZE, GFP_ATOMIC);	if (pc == NULL || rq == NULL || buf == NULL) {		if (pc) kfree(pc);		if (rq) kfree(rq);		if (buf) kfree(buf);		return -ENOMEM;	}	memset (pc, 0, sizeof (idescsi_pc_t));	memset (buf, 0, SCSI_SENSE_BUFFERSIZE);	ide_init_drive_cmd(rq);	rq->special = (char *) pc;	pc->rq = rq;	pc->buffer = buf;	pc->c[0] = REQUEST_SENSE;	pc->c[4] = pc->request_transfer = pc->buffer_size = SCSI_SENSE_BUFFERSIZE;	rq->flags = REQ_SENSE;	pc->timeout = jiffies + WAIT_READY;	/* NOTE! Save the failed packet command in "rq->buffer" */	rq->buffer = (void *) failed_command->special;	pc->scsi_cmd = ((idescsi_pc_t *) failed_command->special)->scsi_cmd;	if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) {		printk ("ide-scsi: %s: queue cmd = ", drive->name);		hexdump(pc->c, 6);	}	rq->rq_disk = scsi->disk;	return ide_do_drive_cmd(drive, rq, ide_preempt);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/c9475cb0c358ff0dd473544280d92482df491913/ide-scsi.c/clean/drivers/scsi/ide-scsi.c