]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] kill the rest of struct file propagation in block ioctls
authorAl Viro <al@aretha.pdmi.ras.ru>
Fri, 19 Sep 2008 07:17:36 +0000 (03:17 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Oct 2008 11:49:14 +0000 (07:49 -0400)
Now we can switch blkdev_ioctl() block_device/mode

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
block/compat_ioctl.c
block/ioctl.c
drivers/char/raw.c
fs/block_dev.c
include/linux/fs.h

index 5b3db0640d87001514aa7920ce6bd3f32951352a..3098c92402fd3b76c240b768d71e6394e85cb01f 100644 (file)
@@ -177,7 +177,7 @@ struct compat_blkpg_ioctl_arg {
        compat_caddr_t data;
 };
 
-static int compat_blkpg_ioctl(struct inode *inode, struct file *file,
+static int compat_blkpg_ioctl(struct block_device *bdev, fmode_t mode,
                unsigned int cmd, struct compat_blkpg_ioctl_arg __user *ua32)
 {
        struct blkpg_ioctl_arg __user *a = compat_alloc_user_space(sizeof(*a));
@@ -196,7 +196,7 @@ static int compat_blkpg_ioctl(struct inode *inode, struct file *file,
        if (err)
                return err;
 
-       return blkdev_ioctl(inode, file, cmd, (unsigned long)a);
+       return blkdev_ioctl(bdev, mode, cmd, (unsigned long)a);
 }
 
 #define BLKBSZGET_32           _IOR(0x12, 112, int)
@@ -715,13 +715,13 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
         * but we call blkdev_ioctl, which gets the lock for us
         */
        case BLKRRPART:
-               return blkdev_ioctl(inode, file, cmd,
+               return blkdev_ioctl(bdev, mode, cmd,
                                (unsigned long)compat_ptr(arg));
        case BLKBSZSET_32:
-               return blkdev_ioctl(inode, file, BLKBSZSET,
+               return blkdev_ioctl(bdev, mode, BLKBSZSET,
                                (unsigned long)compat_ptr(arg));
        case BLKPG:
-               return compat_blkpg_ioctl(inode, file, cmd, compat_ptr(arg));
+               return compat_blkpg_ioctl(bdev, mode, cmd, compat_ptr(arg));
        case BLKRAGET:
        case BLKFRAGET:
                if (!arg)
index 14b7f2c106625ac57dbca1f9de958f96f6e33490..c832d639b6e254eb375d9c69504172182ab14c4d 100644 (file)
@@ -230,20 +230,13 @@ EXPORT_SYMBOL_GPL(__blkdev_driver_ioctl);
  * always keep this in sync with compat_blkdev_ioctl() and
  * compat_blkdev_locked_ioctl()
  */
-int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,
+int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd,
                        unsigned long arg)
 {
-       struct block_device *bdev = inode->i_bdev;
        struct gendisk *disk = bdev->bd_disk;
        struct backing_dev_info *bdi;
        loff_t size;
        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) {
        case BLKFLSBUF:
index f3cf5eb9b7fb81cbc88fc1b6897b1a9d0b550ad4..96adf28a17e43b309d8af6858d695015c84cc6d1 100644 (file)
@@ -125,7 +125,7 @@ raw_ioctl(struct inode *inode, struct file *filp,
 {
        struct block_device *bdev = filp->private_data;
 
-       return blkdev_ioctl(bdev->bd_inode, NULL, command, arg);
+       return blkdev_ioctl(bdev, 0, command, arg);
 }
 
 static void bind_device(struct raw_config_request *rq)
index b89c956e04f602d3050158bb034993f961f1bfe8..05865b93f7e1cd32112e04aface1f649e550c6ab 100644 (file)
@@ -1202,7 +1202,11 @@ static int blkdev_close(struct inode * inode, struct file * filp)
 
 static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg)
 {
-       return blkdev_ioctl(file->f_mapping->host, file, cmd, arg);
+       struct block_device *bdev = I_BDEV(file->f_mapping->host);
+       fmode_t mode = file->f_mode;
+       if (file->f_flags & O_NDELAY)
+               mode |= FMODE_NDELAY_NOW;
+       return blkdev_ioctl(bdev, mode, cmd, arg);
 }
 
 static const struct address_space_operations def_blk_aops = {
@@ -1238,7 +1242,7 @@ int ioctl_by_bdev(struct block_device *bdev, unsigned cmd, unsigned long arg)
        int res;
        mm_segment_t old_fs = get_fs();
        set_fs(KERNEL_DS);
-       res = blkdev_ioctl(bdev->bd_inode, NULL, cmd, arg);
+       res = blkdev_ioctl(bdev, 0, cmd, arg);
        set_fs(old_fs);
        return res;
 }
index 11de682c65a1a0442c8b105b4553bba9c6b2617b..ff536e106b4e929a80b74a46c70ee0bd5fcbca32 100644 (file)
@@ -1717,7 +1717,7 @@ extern const struct file_operations bad_sock_fops;
 extern const struct file_operations def_fifo_fops;
 #ifdef CONFIG_BLOCK
 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 block_device *, fmode_t, 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_put(struct block_device *, fmode_t);