Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9fa295e1 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide: factor out HDIO_*_NICE ioctl handling to ide_*_nice_ioctl()



Factor out HDIO_{GET,SET}_NICE ioctl handling from
generic_ide_ioctl() to ide_{get,set}_nice_ioctl().

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 02d599a3
Loading
Loading
Loading
Loading
+26 −14
Original line number Original line Diff line number Diff line
@@ -558,6 +558,28 @@ static int ide_get_identity_ioctl(ide_drive_t *drive, unsigned int cmd,
	return rc;
	return rc;
}
}


static int ide_get_nice_ioctl(ide_drive_t *drive, unsigned long arg)
{
	return put_user((drive->dsc_overlap << IDE_NICE_DSC_OVERLAP) |
			(drive->nice1 << IDE_NICE_1), (long __user *)arg);
}

static int ide_set_nice_ioctl(ide_drive_t *drive, unsigned long arg)
{
	if (arg != (arg & ((1 << IDE_NICE_DSC_OVERLAP) | (1 << IDE_NICE_1))))
		return -EPERM;

	if (((arg >> IDE_NICE_DSC_OVERLAP) & 1) &&
	    (drive->media == ide_disk || drive->media == ide_floppy ||
	     drive->scsi))
		return -EPERM;

	drive->dsc_overlap = (arg >> IDE_NICE_DSC_OVERLAP) & 1;
	drive->nice1 = (arg >> IDE_NICE_1) & 1;

	return 0;
}

int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev,
int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device *bdev,
			unsigned int cmd, unsigned long arg)
			unsigned int cmd, unsigned long arg)
{
{
@@ -583,9 +605,7 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
				return -EINVAL;
				return -EINVAL;
			return ide_get_identity_ioctl(drive, cmd, arg);
			return ide_get_identity_ioctl(drive, cmd, arg);
		case HDIO_GET_NICE:
		case HDIO_GET_NICE:
			return put_user(drive->dsc_overlap	<<	IDE_NICE_DSC_OVERLAP	|
			return ide_get_nice_ioctl(drive, arg);
					drive->nice1 << IDE_NICE_1,
					(long __user *) arg);
#ifdef CONFIG_IDE_TASK_IOCTL
#ifdef CONFIG_IDE_TASK_IOCTL
		case HDIO_DRIVE_TASKFILE:
		case HDIO_DRIVE_TASKFILE:
		        if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
		        if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
@@ -608,17 +628,9 @@ int generic_ide_ioctl(ide_drive_t *drive, struct file *file, struct block_device
				return -EACCES;
				return -EACCES;
			return ide_task_ioctl(drive, cmd, arg);
			return ide_task_ioctl(drive, cmd, arg);
		case HDIO_SET_NICE:
		case HDIO_SET_NICE:
			if (!capable(CAP_SYS_ADMIN)) return -EACCES;
			if (!capable(CAP_SYS_ADMIN))
			if (arg != (arg & ((1 << IDE_NICE_DSC_OVERLAP) | (1 << IDE_NICE_1))))
				return -EACCES;
				return -EPERM;
			return ide_set_nice_ioctl(drive, arg);
			if (((arg >> IDE_NICE_DSC_OVERLAP) & 1) &&
			    (drive->media == ide_disk ||
			     drive->media == ide_floppy ||
			     drive->scsi))
				return -EPERM;
			drive->dsc_overlap = (arg >> IDE_NICE_DSC_OVERLAP) & 1;
			drive->nice1 = (arg >> IDE_NICE_1) & 1;
			return 0;
		case HDIO_DRIVE_RESET:
		case HDIO_DRIVE_RESET:
			if (!capable(CAP_SYS_ADMIN))
			if (!capable(CAP_SYS_ADMIN))
				return -EACCES;
				return -EACCES;