[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>
This commit is contained in:
Al Viro
2008-03-02 09:09:22 -05:00
parent badf8082c3
commit d4430d62fa
45 changed files with 167 additions and 131 deletions
+3 -3
View File
@@ -108,9 +108,9 @@ static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo);
static struct block_device_operations ubd_blops = {
.owner = THIS_MODULE,
.open = ubd_open,
.release = ubd_release,
.ioctl = ubd_ioctl,
.__open = ubd_open,
.__release = ubd_release,
.__ioctl = ubd_ioctl,
.getgeo = ubd_getgeo,
};
+9 -8
View File
@@ -708,17 +708,17 @@ static int compat_blkdev_driver_ioctl(struct inode *inode, struct file *file,
return -ENOIOCTLCMD;
}
if (disk->fops->unlocked_ioctl)
return disk->fops->unlocked_ioctl(file, cmd, arg);
if (disk->fops->__unlocked_ioctl)
return disk->fops->__unlocked_ioctl(file, cmd, arg);
if (disk->fops->ioctl) {
if (disk->fops->__ioctl) {
lock_kernel();
ret = disk->fops->ioctl(inode, file, cmd, arg);
ret = disk->fops->__ioctl(inode, file, cmd, arg);
unlock_kernel();
return ret;
}
return -ENOTTY;
return __blkdev_driver_ioctl(inode->i_bdev, file->f_mode, cmd, arg);
}
static 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)
lock_kernel();
ret = compat_blkdev_locked_ioctl(inode, file, bdev, cmd, arg);
/* FIXME: why do we assume -> compat_ioctl needs the BKL? */
if (ret == -ENOIOCTLCMD && disk->fops->compat_ioctl)
ret = disk->fops->compat_ioctl(file, cmd, arg);
if (ret == -ENOIOCTLCMD && disk->fops->__compat_ioctl)
ret = disk->fops->__compat_ioctl(file, cmd, arg);
unlock_kernel();
if (ret == -ENOIOCTLCMD && disk->fops->compat_ioctl)
ret = disk->fops->compat_ioctl(bdev, file->f_mode, cmd, arg);
if (ret != -ENOIOCTLCMD)
return ret;
+26 -9
View File
@@ -269,17 +269,24 @@ 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)
return disk->fops->unlocked_ioctl(file, cmd, arg);
fmode_t mode = 0;
if (file) {
mode = file->f_mode;
if (file->f_flags & O_NDELAY)
mode |= FMODE_NDELAY_NOW;
}
if (disk->fops->ioctl) {
if (disk->fops->__unlocked_ioctl)
return disk->fops->__unlocked_ioctl(file, cmd, arg);
if (disk->fops->__ioctl) {
lock_kernel();
ret = disk->fops->ioctl(inode, file, cmd, arg);
ret = disk->fops->__ioctl(inode, file, cmd, arg);
unlock_kernel();
return ret;
}
return -ENOTTY;
return __blkdev_driver_ioctl(inode->i_bdev, mode, cmd, arg);
}
EXPORT_SYMBOL_GPL(blkdev_driver_ioctl);
@@ -295,12 +302,22 @@ int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
fake_file.f_path.dentry = &fake_dentry;
fake_dentry.d_inode = bdev->bd_inode;
if (disk->fops->unlocked_ioctl)
return disk->fops->unlocked_ioctl(&fake_file, cmd, arg);
if (disk->fops->__unlocked_ioctl)
return disk->fops->__unlocked_ioctl(&fake_file, cmd, arg);
if (disk->fops->ioctl) {
if (disk->fops->__ioctl) {
lock_kernel();
ret = disk->fops->ioctl(bdev->bd_inode, &fake_file, cmd, arg);
ret = disk->fops->__ioctl(bdev->bd_inode, &fake_file, cmd, arg);
unlock_kernel();
return ret;
}
if (disk->fops->ioctl)
return disk->fops->ioctl(bdev, mode, cmd, arg);
if (disk->fops->locked_ioctl) {
lock_kernel();
ret = disk->fops->locked_ioctl(bdev, mode, cmd, arg);
unlock_kernel();
return ret;
}
+1 -1
View File
@@ -153,7 +153,7 @@ static int DAC960_revalidate_disk(struct gendisk *disk)
static struct block_device_operations DAC960_BlockDeviceOperations = {
.owner = THIS_MODULE,
.open = DAC960_open,
.__open = DAC960_open,
.getgeo = DAC960_getgeo,
.media_changed = DAC960_media_changed,
.revalidate_disk = DAC960_revalidate_disk,
+3 -3
View File
@@ -1648,9 +1648,9 @@ static int amiga_floppy_change(struct gendisk *disk)
static struct block_device_operations floppy_fops = {
.owner = THIS_MODULE,
.open = floppy_open,
.release = floppy_release,
.ioctl = fd_ioctl,
.__open = floppy_open,
.__release = floppy_release,
.__ioctl = fd_ioctl,
.getgeo = fd_getgeo,
.media_changed = amiga_floppy_change,
};
+2 -2
View File
@@ -239,8 +239,8 @@ aoeblk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
}
static struct block_device_operations aoe_bdops = {
.open = aoeblk_open,
.release = aoeblk_release,
.__open = aoeblk_open,
.__release = aoeblk_release,
.getgeo = aoeblk_getgeo,
.owner = THIS_MODULE,
};
+3 -3
View File
@@ -1857,9 +1857,9 @@ static int floppy_release( struct inode * inode, struct file * filp )
static struct block_device_operations floppy_fops = {
.owner = THIS_MODULE,
.open = floppy_open,
.release = floppy_release,
.ioctl = fd_ioctl,
.__open = floppy_open,
.__release = floppy_release,
.__ioctl = fd_ioctl,
.media_changed = check_floppy_change,
.revalidate_disk= floppy_revalidate,
};
+1 -1
View File
@@ -376,7 +376,7 @@ static int brd_ioctl(struct inode *inode, struct file *file,
static struct block_device_operations brd_fops = {
.owner = THIS_MODULE,
.ioctl = brd_ioctl,
.__ioctl = brd_ioctl,
#ifdef CONFIG_BLK_DEV_XIP
.direct_access = brd_direct_access,
#endif
+4 -4
View File
@@ -197,12 +197,12 @@ static long cciss_compat_ioctl(struct file *f, unsigned cmd, unsigned long arg);
static struct block_device_operations cciss_fops = {
.owner = THIS_MODULE,
.open = cciss_open,
.release = cciss_release,
.ioctl = cciss_ioctl,
.__open = cciss_open,
.__release = cciss_release,
.__ioctl = cciss_ioctl,
.getgeo = cciss_getgeo,
#ifdef CONFIG_COMPAT
.compat_ioctl = cciss_compat_ioctl,
.__compat_ioctl = cciss_compat_ioctl,
#endif
.revalidate_disk = cciss_revalidate,
};
+3 -3
View File
@@ -195,9 +195,9 @@ static inline ctlr_info_t *get_host(struct gendisk *disk)
static struct block_device_operations ida_fops = {
.owner = THIS_MODULE,
.open = ida_open,
.release = ida_release,
.ioctl = ida_ioctl,
.__open = ida_open,
.__release = ida_release,
.__ioctl = ida_ioctl,
.getgeo = ida_getgeo,
.revalidate_disk= ida_revalidate,
};
+3 -3
View File
@@ -3902,9 +3902,9 @@ static int floppy_revalidate(struct gendisk *disk)
static struct block_device_operations floppy_fops = {
.owner = THIS_MODULE,
.open = floppy_open,
.release = floppy_release,
.ioctl = fd_ioctl,
.__open = floppy_open,
.__release = floppy_release,
.__ioctl = fd_ioctl,
.getgeo = fd_getgeo,
.media_changed = check_floppy_change,
.revalidate_disk = floppy_revalidate,
+4 -4
View File
@@ -1355,11 +1355,11 @@ static int lo_release(struct inode *inode, struct file *file)
static struct block_device_operations lo_fops = {
.owner = THIS_MODULE,
.open = lo_open,
.release = lo_release,
.ioctl = lo_ioctl,
.__open = lo_open,
.__release = lo_release,
.__ioctl = lo_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = lo_compat_ioctl,
.__compat_ioctl = lo_compat_ioctl,
#endif
};
+1 -1
View File
@@ -691,7 +691,7 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
static struct block_device_operations nbd_fops =
{
.owner = THIS_MODULE,
.ioctl = nbd_ioctl,
.__ioctl = nbd_ioctl,
};
/*
+3 -3
View File
@@ -252,9 +252,9 @@ static int pcd_block_media_changed(struct gendisk *disk)
static struct block_device_operations pcd_bdops = {
.owner = THIS_MODULE,
.open = pcd_block_open,
.release = pcd_block_release,
.ioctl = pcd_block_ioctl,
.__open = pcd_block_open,
.__release = pcd_block_release,
.__ioctl = pcd_block_ioctl,
.media_changed = pcd_block_media_changed,
};
+3 -3
View File
@@ -807,9 +807,9 @@ static int pd_revalidate(struct gendisk *p)
static struct block_device_operations pd_fops = {
.owner = THIS_MODULE,
.open = pd_open,
.release = pd_release,
.ioctl = pd_ioctl,
.__open = pd_open,
.__release = pd_release,
.__ioctl = pd_ioctl,
.getgeo = pd_getgeo,
.media_changed = pd_check_media,
.revalidate_disk= pd_revalidate
+3 -3
View File
@@ -264,9 +264,9 @@ static char *pf_buf; /* buffer for request in progress */
static struct block_device_operations pf_fops = {
.owner = THIS_MODULE,
.open = pf_open,
.release = pf_release,
.ioctl = pf_ioctl,
.__open = pf_open,
.__release = pf_release,
.__ioctl = pf_ioctl,
.getgeo = pf_getgeo,
.media_changed = pf_check_media,
};
+3 -3
View File
@@ -2847,9 +2847,9 @@ static int pkt_media_changed(struct gendisk *disk)
static struct block_device_operations pktcdvd_ops = {
.owner = THIS_MODULE,
.open = pkt_open,
.release = pkt_close,
.ioctl = pkt_ioctl,
.__open = pkt_open,
.__release = pkt_close,
.__ioctl = pkt_ioctl,
.media_changed = pkt_media_changed,
};
+3 -3
View File
@@ -998,9 +998,9 @@ static int floppy_revalidate(struct gendisk *disk)
}
static struct block_device_operations floppy_fops = {
.open = floppy_open,
.release = floppy_release,
.ioctl = floppy_ioctl,
.__open = floppy_open,
.__release = floppy_release,
.__ioctl = floppy_ioctl,
.media_changed = floppy_check_change,
.revalidate_disk= floppy_revalidate,
};
+3 -3
View File
@@ -1791,9 +1791,9 @@ static int ub_bd_media_changed(struct gendisk *disk)
static struct block_device_operations ub_bd_fops = {
.owner = THIS_MODULE,
.open = ub_bd_open,
.release = ub_bd_release,
.ioctl = ub_bd_ioctl,
.__open = ub_bd_open,
.__release = ub_bd_release,
.__ioctl = ub_bd_ioctl,
.media_changed = ub_bd_media_changed,
.revalidate_disk = ub_bd_revalidate,
};
+2 -2
View File
@@ -221,8 +221,8 @@ static int viodasd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
*/
static struct block_device_operations viodasd_fops = {
.owner = THIS_MODULE,
.open = viodasd_open,
.release = viodasd_release,
.__open = viodasd_open,
.__release = viodasd_release,
.getgeo = viodasd_getgeo,
};

Some files were not shown because too many files have changed in this diff Show More