提交 7006f6ec 编写于 作者: A Alasdair G Kergon 提交者: Linus Torvalds

[PATCH] dm: export blkdev_driver_ioctl

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: NAlasdair G Kergon <agk@redhat.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 9af4aa30
...@@ -199,8 +199,8 @@ static int blkdev_locked_ioctl(struct file *file, struct block_device *bdev, ...@@ -199,8 +199,8 @@ static int blkdev_locked_ioctl(struct file *file, struct block_device *bdev,
return -ENOIOCTLCMD; return -ENOIOCTLCMD;
} }
static int blkdev_driver_ioctl(struct inode *inode, struct file *file, int blkdev_driver_ioctl(struct inode *inode, struct file *file,
struct gendisk *disk, unsigned cmd, unsigned long arg) struct gendisk *disk, unsigned cmd, unsigned long arg)
{ {
int ret; int ret;
if (disk->fops->unlocked_ioctl) if (disk->fops->unlocked_ioctl)
...@@ -215,6 +215,7 @@ static int blkdev_driver_ioctl(struct inode *inode, struct file *file, ...@@ -215,6 +215,7 @@ static int blkdev_driver_ioctl(struct inode *inode, struct file *file,
return -ENOTTY; return -ENOTTY;
} }
EXPORT_SYMBOL_GPL(blkdev_driver_ioctl);
int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,
unsigned long arg) unsigned long arg)
......
...@@ -105,7 +105,7 @@ static int linear_ioctl(struct dm_target *ti, struct inode *inode, ...@@ -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 linear_c *lc = (struct linear_c *) ti->private;
struct block_device *bdev = lc->dev->bdev; 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 = { static struct target_type linear_target = {
......
...@@ -1290,7 +1290,8 @@ static int multipath_ioctl(struct dm_target *ti, struct inode *inode, ...@@ -1290,7 +1290,8 @@ static int multipath_ioctl(struct dm_target *ti, struct inode *inode,
spin_unlock_irqrestore(&m->lock, flags); 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);
} }
/*----------------------------------------------------------------- /*-----------------------------------------------------------------
......
...@@ -1523,6 +1523,9 @@ extern const struct file_operations def_fifo_fops; ...@@ -1523,6 +1523,9 @@ 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 *, mode_t, unsigned); extern int blkdev_get(struct block_device *, mode_t, unsigned);
extern int blkdev_put(struct block_device *); extern int blkdev_put(struct block_device *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册