diff --git a/block/ioctl.c b/block/ioctl.c index 309760b7e37f0c9a7d08ddcf047196dc1eb70875..58aab630dfc1a55eaf06975d5a48600b5f14e49e 100644 --- a/block/ioctl.c +++ b/block/ioctl.c @@ -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) diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c index c58f072ccae6b3c2e90017725b0cad917d9a1554..2a6bad451f8660bfb9783ad90f0b762328a974c1 100644 --- a/drivers/md/dm-linear.c +++ b/drivers/md/dm-linear.c @@ -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 = { diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 14cfdb538efdcb6279742e7046b5381925c74b10..dcfbf830964cb3de1033e3a8159c3ed131dcc076 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -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); } /*----------------------------------------------------------------- diff --git a/include/linux/fs.h b/include/linux/fs.h index 7b61e94bf8fcc7b492c10da8f3a1a746d8765504..f53bf4ff195592bfa315677b45dc073a02d63b56 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -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 *);