[PATCH] dm: export blkdev_driver_ioctl
authorAlasdair G Kergon <agk@redhat.com>
Tue, 3 Oct 2006 08:15:21 +0000 (01:15 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 3 Oct 2006 15:04:13 +0000 (08:04 -0700)
Export blkdev_driver_ioctl for device-mapper.

If we get as far as the device-mapper ioctl handler, we know the ioctl is not
a standard block layer BLK* one, so we don't need to check for them a second
time and can call blkdev_driver_ioctl() directly.

Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
block/ioctl.c
drivers/md/dm-linear.c
drivers/md/dm-mpath.c
include/linux/fs.h

index 309760b7e37f0c9a7d08ddcf047196dc1eb70875..58aab630dfc1a55eaf06975d5a48600b5f14e49e 100644 (file)
@@ -199,8 +199,8 @@ static int blkdev_locked_ioctl(struct file *file, struct block_device *bdev,
        return -ENOIOCTLCMD;
 }
 
-static int blkdev_driver_ioctl(struct inode *inode, struct file *file,
-               struct gendisk *disk, unsigned cmd, unsigned long arg)
+int blkdev_driver_ioctl(struct inode *inode, struct file *file,
+                       struct gendisk *disk, unsigned cmd, unsigned long arg)
 {
        int ret;
        if (disk->fops->unlocked_ioctl)
@@ -215,6 +215,7 @@ static int blkdev_driver_ioctl(struct inode *inode, struct file *file,
 
        return -ENOTTY;
 }
+EXPORT_SYMBOL_GPL(blkdev_driver_ioctl);
 
 int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,
                        unsigned long arg)
index c58f072ccae6b3c2e90017725b0cad917d9a1554..2a6bad451f8660bfb9783ad90f0b762328a974c1 100644 (file)
@@ -105,7 +105,7 @@ static int linear_ioctl(struct dm_target *ti, struct inode *inode,
        struct linear_c *lc = (struct linear_c *) ti->private;
        struct block_device *bdev = lc->dev->bdev;
 
-       return blkdev_ioctl(bdev->bd_inode, filp, cmd, arg);
+       return blkdev_driver_ioctl(bdev->bd_inode, filp, bdev->bd_disk, cmd, arg);
 }
 
 static struct target_type linear_target = {
index 14cfdb538efdcb6279742e7046b5381925c74b10..dcfbf830964cb3de1033e3a8159c3ed131dcc076 100644 (file)
@@ -1290,7 +1290,8 @@ static int multipath_ioctl(struct dm_target *ti, struct inode *inode,
 
        spin_unlock_irqrestore(&m->lock, flags);
 
-       return r ? : blkdev_ioctl(bdev->bd_inode, filp, cmd, arg);
+       return r ? : blkdev_driver_ioctl(bdev->bd_inode, filp, bdev->bd_disk,
+                    cmd, arg);
 }
 
 /*-----------------------------------------------------------------
index 7b61e94bf8fcc7b492c10da8f3a1a746d8765504..f53bf4ff195592bfa315677b45dc073a02d63b56 100644 (file)
@@ -1523,6 +1523,9 @@ 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_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 int blkdev_get(struct block_device *, mode_t, unsigned);
 extern int blkdev_put(struct block_device *);