Loading block/ioctl.c +10 −19 Original line number Original line Diff line number Diff line Loading @@ -265,21 +265,6 @@ static int blkdev_locked_ioctl(struct file *file, struct block_device *bdev, return -ENOIOCTLCMD; return -ENOIOCTLCMD; } } int blkdev_driver_ioctl(struct inode *inode, struct file *file, struct gendisk *disk, unsigned cmd, unsigned long arg) { int ret; fmode_t mode = 0; if (file) { mode = file->f_mode; if (file->f_flags & O_NDELAY) mode |= FMODE_NDELAY_NOW; } return __blkdev_driver_ioctl(inode->i_bdev, mode, cmd, arg); } EXPORT_SYMBOL_GPL(blkdev_driver_ioctl); int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, unsigned long arg) unsigned cmd, unsigned long arg) { { Loading Loading @@ -315,13 +300,19 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, struct block_device *bdev = inode->i_bdev; struct block_device *bdev = inode->i_bdev; struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk; int ret, n; int ret, n; fmode_t mode = 0; if (file) { mode = file->f_mode; if (file->f_flags & O_NDELAY) mode |= FMODE_NDELAY_NOW; } switch(cmd) { switch(cmd) { case BLKFLSBUF: case BLKFLSBUF: if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN)) return -EACCES; return -EACCES; ret = blkdev_driver_ioctl(inode, file, disk, cmd, arg); ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); /* -EINVAL to handle old uncorrected drivers */ /* -EINVAL to handle old uncorrected drivers */ if (ret != -EINVAL && ret != -ENOTTY) if (ret != -EINVAL && ret != -ENOTTY) return ret; return ret; Loading @@ -333,7 +324,7 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, return 0; return 0; case BLKROSET: case BLKROSET: ret = blkdev_driver_ioctl(inode, file, disk, cmd, arg); ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); /* -EINVAL to handle old uncorrected drivers */ /* -EINVAL to handle old uncorrected drivers */ if (ret != -EINVAL && ret != -ENOTTY) if (ret != -EINVAL && ret != -ENOTTY) return ret; return ret; Loading @@ -349,7 +340,7 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, case BLKDISCARD: { case BLKDISCARD: { uint64_t range[2]; uint64_t range[2]; if (!(file->f_mode & FMODE_WRITE)) if (!(mode & FMODE_WRITE)) return -EBADF; return -EBADF; if (copy_from_user(range, (void __user *)arg, sizeof(range))) if (copy_from_user(range, (void __user *)arg, sizeof(range))) Loading Loading @@ -387,6 +378,6 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, if (ret != -ENOIOCTLCMD) if (ret != -ENOIOCTLCMD) return ret; return ret; return blkdev_driver_ioctl(inode, file, disk, cmd, arg); ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); } } EXPORT_SYMBOL_GPL(blkdev_ioctl); EXPORT_SYMBOL_GPL(blkdev_ioctl); include/linux/fs.h +0 −3 Original line number Original line Diff line number Diff line Loading @@ -1718,9 +1718,6 @@ extern const struct file_operations def_fifo_fops; #ifdef CONFIG_BLOCK #ifdef CONFIG_BLOCK extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); extern int blkdev_driver_ioctl(struct inode *inode, struct file *file, struct gendisk *disk, unsigned cmd, unsigned long arg); extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); extern int blkdev_get(struct block_device *, fmode_t); extern int blkdev_get(struct block_device *, fmode_t); extern int blkdev_put(struct block_device *, fmode_t); extern int blkdev_put(struct block_device *, fmode_t); Loading Loading
block/ioctl.c +10 −19 Original line number Original line Diff line number Diff line Loading @@ -265,21 +265,6 @@ static int blkdev_locked_ioctl(struct file *file, struct block_device *bdev, return -ENOIOCTLCMD; return -ENOIOCTLCMD; } } int blkdev_driver_ioctl(struct inode *inode, struct file *file, struct gendisk *disk, unsigned cmd, unsigned long arg) { int ret; fmode_t mode = 0; if (file) { mode = file->f_mode; if (file->f_flags & O_NDELAY) mode |= FMODE_NDELAY_NOW; } return __blkdev_driver_ioctl(inode->i_bdev, mode, cmd, arg); } EXPORT_SYMBOL_GPL(blkdev_driver_ioctl); int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, unsigned long arg) unsigned cmd, unsigned long arg) { { Loading Loading @@ -315,13 +300,19 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, struct block_device *bdev = inode->i_bdev; struct block_device *bdev = inode->i_bdev; struct gendisk *disk = bdev->bd_disk; struct gendisk *disk = bdev->bd_disk; int ret, n; int ret, n; fmode_t mode = 0; if (file) { mode = file->f_mode; if (file->f_flags & O_NDELAY) mode |= FMODE_NDELAY_NOW; } switch(cmd) { switch(cmd) { case BLKFLSBUF: case BLKFLSBUF: if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN)) return -EACCES; return -EACCES; ret = blkdev_driver_ioctl(inode, file, disk, cmd, arg); ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); /* -EINVAL to handle old uncorrected drivers */ /* -EINVAL to handle old uncorrected drivers */ if (ret != -EINVAL && ret != -ENOTTY) if (ret != -EINVAL && ret != -ENOTTY) return ret; return ret; Loading @@ -333,7 +324,7 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, return 0; return 0; case BLKROSET: case BLKROSET: ret = blkdev_driver_ioctl(inode, file, disk, cmd, arg); ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); /* -EINVAL to handle old uncorrected drivers */ /* -EINVAL to handle old uncorrected drivers */ if (ret != -EINVAL && ret != -ENOTTY) if (ret != -EINVAL && ret != -ENOTTY) return ret; return ret; Loading @@ -349,7 +340,7 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, case BLKDISCARD: { case BLKDISCARD: { uint64_t range[2]; uint64_t range[2]; if (!(file->f_mode & FMODE_WRITE)) if (!(mode & FMODE_WRITE)) return -EBADF; return -EBADF; if (copy_from_user(range, (void __user *)arg, sizeof(range))) if (copy_from_user(range, (void __user *)arg, sizeof(range))) Loading Loading @@ -387,6 +378,6 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, if (ret != -ENOIOCTLCMD) if (ret != -ENOIOCTLCMD) return ret; return ret; return blkdev_driver_ioctl(inode, file, disk, cmd, arg); ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); } } EXPORT_SYMBOL_GPL(blkdev_ioctl); EXPORT_SYMBOL_GPL(blkdev_ioctl);
include/linux/fs.h +0 −3 Original line number Original line Diff line number Diff line Loading @@ -1718,9 +1718,6 @@ extern const struct file_operations def_fifo_fops; #ifdef CONFIG_BLOCK #ifdef CONFIG_BLOCK extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); extern int blkdev_driver_ioctl(struct inode *inode, struct file *file, struct gendisk *disk, unsigned cmd, unsigned long arg); extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); extern int blkdev_get(struct block_device *, fmode_t); extern int blkdev_get(struct block_device *, fmode_t); extern int blkdev_put(struct block_device *, fmode_t); extern int blkdev_put(struct block_device *, fmode_t); Loading