/* This is tightly woven into the driver->do_special can not touch. DON'T do it again until a total personality rewrite is committed.  */
static int set_multcount(ide_drive_t *drive, int arg)
/* This is tightly woven into the driver->do_special can not touch. DON'T do it again until a total personality rewrite is committed.  */
static int set_multcount(ide_drive_t *drive, int arg)
{
	struct request *rq;
	int error;
	if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff))
		return -EINVAL;
	if (drive->special_flags & IDE_SFLAG_SET_MULTMODE)
		return -EBUSY;
	rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
	rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
	drive->mult_req = arg;
	drive->special_flags |= IDE_SFLAG_SET_MULTMODE;
	error = blk_execute_rq(drive->queue, NULL, rq, 0);
	blk_put_request(rq);
	return (drive->mult_count == arg) ? 0 : -EIO;
}