ide: factor out HDIO_*_NICE ioctl handling to ide_*_nice_ioctl()
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 10 Oct 2008 20:39:29 +0000 (22:39 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Fri, 10 Oct 2008 20:39:29 +0000 (22:39 +0200)
Factor out HDIO_{GET,SET}_NICE ioctl handling from
generic_ide_ioctl() to ide_{get,set}_nice_ioctl().

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide.c

index 4d0c661e78a5b78885e7c40262f5f6c2417630b2..12618d2aed2cc006a10a46ae91d17dcded0d4c07 100644 (file)
@@ -558,6 +558,28 @@ out:
        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,
                        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 ide_get_identity_ioctl(drive, cmd, arg);
                case HDIO_GET_NICE:
-                       return put_user(drive->dsc_overlap      <<      IDE_NICE_DSC_OVERLAP    |
-                                       drive->nice1 << IDE_NICE_1,
-                                       (long __user *) arg);
+                       return ide_get_nice_ioctl(drive, arg);
 #ifdef CONFIG_IDE_TASK_IOCTL
                case HDIO_DRIVE_TASKFILE:
                        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 ide_task_ioctl(drive, cmd, arg);
                case HDIO_SET_NICE:
-                       if (!capable(CAP_SYS_ADMIN)) return -EACCES;
-                       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;
+                       if (!capable(CAP_SYS_ADMIN))
+                               return -EACCES;
+                       return ide_set_nice_ioctl(drive, arg);
                case HDIO_DRIVE_RESET:
                        if (!capable(CAP_SYS_ADMIN))
                                return -EACCES;