args->rq = &rq; 
static int ide_diag_taskfile(ide_drive_t *drive, ide_task_t *args, unsigned long data_size, u8 *buf){	struct request rq;	memset(&rq, 0, sizeof(rq));	rq.flags = REQ_DRIVE_TASKFILE;	rq.buffer = buf;	/*	 * (ks) We transfer currently only whole sectors.	 * This is suffient for now.  But, it would be great,	 * if we would find a solution to transfer any size.	 * To support special commands like READ LONG.	 */	if (args->command_type != IDE_DRIVE_TASK_NO_DATA) {		if (data_size == 0)			rq.nr_sectors = (args->hobRegister[IDE_NSECTOR_OFFSET] << 8) | args->tfRegister[IDE_NSECTOR_OFFSET];		else			rq.nr_sectors = data_size / SECTOR_SIZE;		if (!rq.nr_sectors) {			printk(KERN_ERR "%s: in/out command without data\n",					drive->name);			return -EFAULT;		}		rq.hard_nr_sectors = rq.nr_sectors;		rq.hard_cur_sectors = rq.current_nr_sectors = rq.nr_sectors;		if (args->command_type == IDE_DRIVE_TASK_RAW_WRITE)			rq.flags |= REQ_RW;	}	rq.special = args;	return ide_do_drive_cmd(drive, &rq, ide_wait);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ef0f6a437f92fbd96c725086555b37b29371e107/ide-taskfile.c/clean/drivers/ide/ide-taskfile.c