aboutsummaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2008-03-02 09:09:22 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2008-10-21 07:47:32 -0400
commitd4430d62fa77208824a37fe6f85ab2831d274769 (patch)
tree5d4d0bca31e63eb208fbebe4f39c912b964c1e4d /block
parentbadf8082c33d18b118d3a6f1b32d5ea6b97d3839 (diff)
[PATCH] beginning of methods conversion
To keep the size of changesets sane we split the switch by drivers; to keep the damn thing bisectable we do the following: 1) rename the affected methods, add ones with correct prototypes, make (few) callers handle both. That's this changeset. 2) for each driver convert to new methods. *ALL* drivers are converted in this series. 3) kill the old (renamed) methods. Note that it _is_ a flagday; all in-tree drivers are converted and by the end of this series no trace of old methods remain. The only reason why we do that this way is to keep the damn thing bisectable and allow per-driver debugging if anything goes wrong. New methods: open(bdev, mode) release(disk, mode) ioctl(bdev, mode, cmd, arg) /* Called without BKL */ compat_ioctl(bdev, mode, cmd, arg) locked_ioctl(bdev, mode, cmd, arg) /* Called with BKL, legacy */ Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'block')
-rw-r--r--block/compat_ioctl.c17
-rw-r--r--block/ioctl.c35
2 files changed, 35 insertions, 17 deletions
diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c
index 1e559fba7bdf..576c4fd15463 100644
--- a/block/compat_ioctl.c
+++ b/block/compat_ioctl.c
@@ -708,17 +708,17 @@ static int compat_blkdev_driver_ioctl(struct inode *inode, struct file *file,
708 return -ENOIOCTLCMD; 708 return -ENOIOCTLCMD;
709 } 709 }
710 710
711 if (disk->fops->unlocked_ioctl) 711 if (disk->fops->__unlocked_ioctl)
712 return disk->fops->unlocked_ioctl(file, cmd, arg); 712 return disk->fops->__unlocked_ioctl(file, cmd, arg);
713 713
714 if (disk->fops->ioctl) { 714 if (disk->fops->__ioctl) {
715 lock_kernel(); 715 lock_kernel();
716 ret = disk->fops->ioctl(inode, file, cmd, arg); 716 ret = disk->fops->__ioctl(inode, file, cmd, arg);
717 unlock_kernel(); 717 unlock_kernel();
718 return ret; 718 return ret;
719 } 719 }
720 720
721 return -ENOTTY; 721 return __blkdev_driver_ioctl(inode->i_bdev, file->f_mode, cmd, arg);
722} 722}
723 723
724static int compat_blkdev_locked_ioctl(struct inode *inode, struct file *file, 724static int compat_blkdev_locked_ioctl(struct inode *inode, struct file *file,
@@ -805,10 +805,11 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
805 805
806 lock_kernel(); 806 lock_kernel();
807 ret = compat_blkdev_locked_ioctl(inode, file, bdev, cmd, arg); 807 ret = compat_blkdev_locked_ioctl(inode, file, bdev, cmd, arg);
808 /* FIXME: why do we assume -> compat_ioctl needs the BKL? */ 808 if (ret == -ENOIOCTLCMD && disk->fops->__compat_ioctl)
809 if (ret == -ENOIOCTLCMD && disk->fops->compat_ioctl) 809 ret = disk->fops->__compat_ioctl(file, cmd, arg);
810 ret = disk->fops->compat_ioctl(file, cmd, arg);
811 unlock_kernel(); 810 unlock_kernel();
811 if (ret == -ENOIOCTLCMD && disk->fops->compat_ioctl)
812 ret = disk->fops->compat_ioctl(bdev, file->f_mode, cmd, arg);
812 813
813 if (ret != -ENOIOCTLCMD) 814 if (ret != -ENOIOCTLCMD)
814 return ret; 815 return ret;
diff --git a/block/ioctl.c b/block/ioctl.c
index 9a26ace6d042..01ff463bc801 100644
--- a/block/ioctl.c
+++ b/block/ioctl.c
@@ -269,17 +269,24 @@ int blkdev_driver_ioctl(struct inode *inode, struct file *file,
269 struct gendisk *disk, unsigned cmd, unsigned long arg) 269 struct gendisk *disk, unsigned cmd, unsigned long arg)
270{ 270{
271 int ret; 271 int ret;
272 if (disk->fops->unlocked_ioctl) 272 fmode_t mode = 0;
273 return disk->fops->unlocked_ioctl(file, cmd, arg); 273 if (file) {
274 mode = file->f_mode;
275 if (file->f_flags & O_NDELAY)
276 mode |= FMODE_NDELAY_NOW;
277 }
278
279 if (disk->fops->__unlocked_ioctl)
280 return disk->fops->__unlocked_ioctl(file, cmd, arg);
274 281
275 if (disk->fops->ioctl) { 282 if (disk->fops->__ioctl) {
276 lock_kernel(); 283 lock_kernel();
277 ret = disk->fops->ioctl(inode, file, cmd, arg); 284 ret = disk->fops->__ioctl(inode, file, cmd, arg);
278 unlock_kernel(); 285 unlock_kernel();
279 return ret; 286 return ret;
280 } 287 }
281 288
282 return -ENOTTY; 289 return __blkdev_driver_ioctl(inode->i_bdev, mode, cmd, arg);
283} 290}
284EXPORT_SYMBOL_GPL(blkdev_driver_ioctl); 291EXPORT_SYMBOL_GPL(blkdev_driver_ioctl);
285 292
@@ -295,12 +302,22 @@ int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
295 fake_file.f_path.dentry = &fake_dentry; 302 fake_file.f_path.dentry = &fake_dentry;
296 fake_dentry.d_inode = bdev->bd_inode; 303 fake_dentry.d_inode = bdev->bd_inode;
297 304
298 if (disk->fops->unlocked_ioctl) 305 if (disk->fops->__unlocked_ioctl)
299 return disk->fops->unlocked_ioctl(&fake_file, cmd, arg); 306 return disk->fops->__unlocked_ioctl(&fake_file, cmd, arg);
307
308 if (disk->fops->__ioctl) {
309 lock_kernel();
310 ret = disk->fops->__ioctl(bdev->bd_inode, &fake_file, cmd, arg);
311 unlock_kernel();
312 return ret;
313 }
314
315 if (disk->fops->ioctl)
316 return disk->fops->ioctl(bdev, mode, cmd, arg);
300 317
301 if (disk->fops->ioctl) { 318 if (disk->fops->locked_ioctl) {
302 lock_kernel(); 319 lock_kernel();
303 ret = disk->fops->ioctl(bdev->bd_inode, &fake_file, cmd, arg); 320 ret = disk->fops->locked_ioctl(bdev, mode, cmd, arg);
304 unlock_kernel(); 321 unlock_kernel();
305 return ret; 322 return ret;
306 } 323 }