static int  ch_remove(struct device *);
 static int  ch_open(struct inode * inode, struct file * filp);
 static int  ch_release(struct inode * inode, struct file * filp);
-static int  ch_ioctl(struct inode * inode, struct file * filp,
-                    unsigned int cmd, unsigned long arg);
+static long ch_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
 #ifdef CONFIG_COMPAT
 static long ch_ioctl_compat(struct file * filp,
                            unsigned int cmd, unsigned long arg);
 
 static const struct file_operations changer_fops =
 {
-       .owner        = THIS_MODULE,
-       .open         = ch_open,
-       .release      = ch_release,
-       .ioctl        = ch_ioctl,
+       .owner          = THIS_MODULE,
+       .open           = ch_open,
+       .release        = ch_release,
+       .unlocked_ioctl = ch_ioctl,
 #ifdef CONFIG_COMPAT
-       .compat_ioctl = ch_ioctl_compat,
+       .compat_ioctl   = ch_ioctl_compat,
 #endif
 };
 
        return 0;
 }
 
-static int ch_ioctl(struct inode * inode, struct file * file,
+static long ch_ioctl(struct file *file,
                    unsigned int cmd, unsigned long arg)
 {
        scsi_changer *ch = file->private_data;
        case CHIOINITELEM:
        case CHIOSVOLTAG:
                /* compatible */
-               return ch_ioctl(NULL /* inode, unused */,
-                               file, cmd, arg);
+               return ch_ioctl(file, cmd, arg);
        case CHIOGSTATUS32:
        {
                struct changer_element_status32 ces32;