scsi: sg: Consolidate compat ioctl handling
authorChristoph Hellwig <hch@lst.de>
Sat, 24 Jul 2021 07:20:14 +0000 (09:20 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 29 Jul 2021 02:24:24 +0000 (22:24 -0400)
Merge the native and compat ioctl handlers into a single one using
in_compat_syscall().

Link: https://lore.kernel.org/r/20210724072033.1284840-6-hch@lst.de
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/sg.c

index 91e2221..0a6655b 100644 (file)
@@ -1166,28 +1166,11 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
        if (ret != -ENOIOCTLCMD)
                return ret;
 
+       if (in_compat_syscall())
+               return scsi_compat_ioctl(sdp->device, cmd_in, p);
        return scsi_ioctl(sdp->device, cmd_in, p);
 }
 
-#ifdef CONFIG_COMPAT
-static long sg_compat_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
-{
-       void __user *p = compat_ptr(arg);
-       Sg_device *sdp;
-       Sg_fd *sfp;
-       int ret;
-
-       if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
-               return -ENXIO;
-
-       ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
-       if (ret != -ENOIOCTLCMD)
-               return ret;
-
-       return scsi_compat_ioctl(sdp->device, cmd_in, p);
-}
-#endif
-
 static __poll_t
 sg_poll(struct file *filp, poll_table * wait)
 {
@@ -1441,9 +1424,7 @@ static const struct file_operations sg_fops = {
        .write = sg_write,
        .poll = sg_poll,
        .unlocked_ioctl = sg_ioctl,
-#ifdef CONFIG_COMPAT
-       .compat_ioctl = sg_compat_ioctl,
-#endif
+       .compat_ioctl = compat_ptr_ioctl,
        .open = sg_open,
        .mmap = sg_mmap,
        .release = sg_release,