switch simple cases of fget_light to fdget
[linux-block.git] / fs / compat_ioctl.c
index debdfe0fc809edfd01ac4a72a0eaf2753efc993d..48f1987bec34fa0b3cccdc57c0d688c18859d47b 100644 (file)
@@ -1531,16 +1531,13 @@ static int compat_ioctl_check_table(unsigned int xcmd)
 asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
                                unsigned long arg)
 {
-       struct file *filp;
+       struct fd f = fdget(fd);
        int error = -EBADF;
-       int fput_needed;
-
-       filp = fget_light(fd, &fput_needed);
-       if (!filp)
+       if (!f.file)
                goto out;
 
        /* RED-PEN how should LSM module know it's handling 32bit? */
-       error = security_file_ioctl(filp, cmd, arg);
+       error = security_file_ioctl(f.file, cmd, arg);
        if (error)
                goto out_fput;
 
@@ -1560,30 +1557,30 @@ asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
 #if defined(CONFIG_IA64) || defined(CONFIG_X86_64)
        case FS_IOC_RESVSP_32:
        case FS_IOC_RESVSP64_32:
-               error = compat_ioctl_preallocate(filp, compat_ptr(arg));
+               error = compat_ioctl_preallocate(f.file, compat_ptr(arg));
                goto out_fput;
 #else
        case FS_IOC_RESVSP:
        case FS_IOC_RESVSP64:
-               error = ioctl_preallocate(filp, compat_ptr(arg));
+               error = ioctl_preallocate(f.file, compat_ptr(arg));
                goto out_fput;
 #endif
 
        case FIBMAP:
        case FIGETBSZ:
        case FIONREAD:
-               if (S_ISREG(filp->f_path.dentry->d_inode->i_mode))
+               if (S_ISREG(f.file->f_path.dentry->d_inode->i_mode))
                        break;
                /*FALL THROUGH*/
 
        default:
-               if (filp->f_op && filp->f_op->compat_ioctl) {
-                       error = filp->f_op->compat_ioctl(filp, cmd, arg);
+               if (f.file->f_op && f.file->f_op->compat_ioctl) {
+                       error = f.file->f_op->compat_ioctl(f.file, cmd, arg);
                        if (error != -ENOIOCTLCMD)
                                goto out_fput;
                }
 
-               if (!filp->f_op || !filp->f_op->unlocked_ioctl)
+               if (!f.file->f_op || !f.file->f_op->unlocked_ioctl)
                        goto do_ioctl;
                break;
        }
@@ -1591,7 +1588,7 @@ asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
        if (compat_ioctl_check_table(XFORM(cmd)))
                goto found_handler;
 
-       error = do_ioctl_trans(fd, cmd, arg, filp);
+       error = do_ioctl_trans(fd, cmd, arg, f.file);
        if (error == -ENOIOCTLCMD)
                error = -ENOTTY;
 
@@ -1600,9 +1597,9 @@ asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
  found_handler:
        arg = (unsigned long)compat_ptr(arg);
  do_ioctl:
-       error = do_vfs_ioctl(filp, fd, cmd, arg);
+       error = do_vfs_ioctl(f.file, fd, cmd, arg);
  out_fput:
-       fput_light(filp, fput_needed);
+       fdput(f);
  out:
        return error;
 }