aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--arch/um/drivers/ubd_kern.c6
-rw-r--r--block/compat_ioctl.c17
-rw-r--r--block/ioctl.c35
-rw-r--r--drivers/block/DAC960.c2
-rw-r--r--drivers/block/amiflop.c6
-rw-r--r--drivers/block/aoe/aoeblk.c4
-rw-r--r--drivers/block/ataflop.c6
-rw-r--r--drivers/block/brd.c2
-rw-r--r--drivers/block/cciss.c8
-rw-r--r--drivers/block/cpqarray.c6
-rw-r--r--drivers/block/floppy.c6
-rw-r--r--drivers/block/loop.c8
-rw-r--r--drivers/block/nbd.c2
-rw-r--r--drivers/block/paride/pcd.c6
-rw-r--r--drivers/block/paride/pd.c6
-rw-r--r--drivers/block/paride/pf.c6
-rw-r--r--drivers/block/pktcdvd.c6
-rw-r--r--drivers/block/swim3.c6
-rw-r--r--drivers/block/ub.c6
-rw-r--r--drivers/block/viodasd.c4
-rw-r--r--drivers/block/virtio_blk.c2
-rw-r--r--drivers/block/xd.c2
-rw-r--r--drivers/block/xen-blkfront.c4
-rw-r--r--drivers/block/xsysace.c4
-rw-r--r--drivers/block/z2ram.c4
-rw-r--r--drivers/cdrom/gdrom.c6
-rw-r--r--drivers/cdrom/viocd.c6
-rw-r--r--drivers/ide/ide-cd.c6
-rw-r--r--drivers/ide/ide-gd.c6
-rw-r--r--drivers/ide/ide-tape.c6
-rw-r--r--drivers/md/dm.c6
-rw-r--r--drivers/md/md.c6
-rw-r--r--drivers/memstick/core/mspro_block.c4
-rw-r--r--drivers/message/i2o/i2o_block.c6
-rw-r--r--drivers/mmc/card/block.c4
-rw-r--r--drivers/mtd/mtd_blkdevs.c6
-rw-r--r--drivers/s390/block/dasd.c8
-rw-r--r--drivers/s390/block/dcssblk.c4
-rw-r--r--drivers/s390/char/tape_block.c6
-rw-r--r--drivers/scsi/ide-scsi.c6
-rw-r--r--drivers/scsi/sd.c8
-rw-r--r--drivers/scsi/sr.c6
-rw-r--r--fs/block_dev.c18
-rw-r--r--include/linux/blkdev.h15
-rw-r--r--include/linux/fs.h1
45 files changed, 167 insertions, 131 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index b58fb8941d8d..72569cc3cbb7 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -108,9 +108,9 @@ static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo);
108 108
109static struct block_device_operations ubd_blops = { 109static struct block_device_operations ubd_blops = {
110 .owner = THIS_MODULE, 110 .owner = THIS_MODULE,
111 .open = ubd_open, 111 .__open = ubd_open,
112 .release = ubd_release, 112 .__release = ubd_release,
113 .ioctl = ubd_ioctl, 113 .__ioctl = ubd_ioctl,
114 .getgeo = ubd_getgeo, 114 .getgeo = ubd_getgeo,
115}; 115};
116 116
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 }
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
index a002a381df92..4b90ebfa6676 100644
--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -153,7 +153,7 @@ static int DAC960_revalidate_disk(struct gendisk *disk)
153 153
154static struct block_device_operations DAC960_BlockDeviceOperations = { 154static struct block_device_operations DAC960_BlockDeviceOperations = {
155 .owner = THIS_MODULE, 155 .owner = THIS_MODULE,
156 .open = DAC960_open, 156 .__open = DAC960_open,
157 .getgeo = DAC960_getgeo, 157 .getgeo = DAC960_getgeo,
158 .media_changed = DAC960_media_changed, 158 .media_changed = DAC960_media_changed,
159 .revalidate_disk = DAC960_revalidate_disk, 159 .revalidate_disk = DAC960_revalidate_disk,
diff --git a/drivers/block/amiflop.c b/drivers/block/amiflop.c
index d19c5a939fe8..d5da4e3cb2ad 100644
--- a/drivers/block/amiflop.c
+++ b/drivers/block/amiflop.c
@@ -1648,9 +1648,9 @@ static int amiga_floppy_change(struct gendisk *disk)
1648 1648
1649static struct block_device_operations floppy_fops = { 1649static struct block_device_operations floppy_fops = {
1650 .owner = THIS_MODULE, 1650 .owner = THIS_MODULE,
1651 .open = floppy_open, 1651 .__open = floppy_open,
1652 .release = floppy_release, 1652 .__release = floppy_release,
1653 .ioctl = fd_ioctl, 1653 .__ioctl = fd_ioctl,
1654 .getgeo = fd_getgeo, 1654 .getgeo = fd_getgeo,
1655 .media_changed = amiga_floppy_change, 1655 .media_changed = amiga_floppy_change,
1656}; 1656};
diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
index d876ad861237..d4d9796d5ddd 100644
--- a/drivers/block/aoe/aoeblk.c
+++ b/drivers/block/aoe/aoeblk.c
@@ -239,8 +239,8 @@ aoeblk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
239} 239}
240 240
241static struct block_device_operations aoe_bdops = { 241static struct block_device_operations aoe_bdops = {
242 .open = aoeblk_open, 242 .__open = aoeblk_open,
243 .release = aoeblk_release, 243 .__release = aoeblk_release,
244 .getgeo = aoeblk_getgeo, 244 .getgeo = aoeblk_getgeo,
245 .owner = THIS_MODULE, 245 .owner = THIS_MODULE,
246}; 246};
diff --git a/drivers/block/ataflop.c b/drivers/block/ataflop.c
index 85d56a26f7c6..30166774327d 100644
--- a/drivers/block/ataflop.c
+++ b/drivers/block/ataflop.c
@@ -1857,9 +1857,9 @@ static int floppy_release( struct inode * inode, struct file * filp )
1857 1857
1858static struct block_device_operations floppy_fops = { 1858static struct block_device_operations floppy_fops = {
1859 .owner = THIS_MODULE, 1859 .owner = THIS_MODULE,
1860 .open = floppy_open, 1860 .__open = floppy_open,
1861 .release = floppy_release, 1861 .__release = floppy_release,
1862 .ioctl = fd_ioctl, 1862 .__ioctl = fd_ioctl,
1863 .media_changed = check_floppy_change, 1863 .media_changed = check_floppy_change,
1864 .revalidate_disk= floppy_revalidate, 1864 .revalidate_disk= floppy_revalidate,
1865}; 1865};
diff --git a/drivers/block/brd.c b/drivers/block/brd.c
index d070d492e385..2ea99f947667 100644
--- a/drivers/block/brd.c
+++ b/drivers/block/brd.c
@@ -376,7 +376,7 @@ static int brd_ioctl(struct inode *inode, struct file *file,
376 376
377static struct block_device_operations brd_fops = { 377static struct block_device_operations brd_fops = {
378 .owner = THIS_MODULE, 378 .owner = THIS_MODULE,
379 .ioctl = brd_ioctl, 379 .__ioctl = brd_ioctl,
380#ifdef CONFIG_BLK_DEV_XIP 380#ifdef CONFIG_BLK_DEV_XIP
381 .direct_access = brd_direct_access, 381 .direct_access = brd_direct_access,
382#endif 382#endif
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index d9b1c15b8113..781b745181d2 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -197,12 +197,12 @@ static long cciss_compat_ioctl(struct file *f, unsigned cmd, unsigned long arg);
197 197
198static struct block_device_operations cciss_fops = { 198static struct block_device_operations cciss_fops = {
199 .owner = THIS_MODULE, 199 .owner = THIS_MODULE,
200 .open = cciss_open, 200 .__open = cciss_open,
201 .release = cciss_release, 201 .__release = cciss_release,
202 .ioctl = cciss_ioctl, 202 .__ioctl = cciss_ioctl,
203 .getgeo = cciss_getgeo, 203 .getgeo = cciss_getgeo,
204#ifdef CONFIG_COMPAT 204#ifdef CONFIG_COMPAT
205 .compat_ioctl = cciss_compat_ioctl, 205 .__compat_ioctl = cciss_compat_ioctl,
206#endif 206#endif
207 .revalidate_disk = cciss_revalidate, 207 .revalidate_disk = cciss_revalidate,
208}; 208};
diff --git a/drivers/block/cpqarray.c b/drivers/block/cpqarray.c
index 3d967525e9a9..b71334b968b6 100644
--- a/drivers/block/cpqarray.c
+++ b/drivers/block/cpqarray.c
@@ -195,9 +195,9 @@ static inline ctlr_info_t *get_host(struct gendisk *disk)
195 195
196static struct block_device_operations ida_fops = { 196static struct block_device_operations ida_fops = {
197 .owner = THIS_MODULE, 197 .owner = THIS_MODULE,
198 .open = ida_open, 198 .__open = ida_open,
199 .release = ida_release, 199 .__release = ida_release,
200 .ioctl = ida_ioctl, 200 .__ioctl = ida_ioctl,
201 .getgeo = ida_getgeo, 201 .getgeo = ida_getgeo,
202 .revalidate_disk= ida_revalidate, 202 .revalidate_disk= ida_revalidate,
203}; 203};
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 5d60c05a736a..72363df58953 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -3902,9 +3902,9 @@ static int floppy_revalidate(struct gendisk *disk)
3902 3902
3903static struct block_device_operations floppy_fops = { 3903static struct block_device_operations floppy_fops = {
3904 .owner = THIS_MODULE, 3904 .owner = THIS_MODULE,
3905 .open = floppy_open, 3905 .__open = floppy_open,
3906 .release = floppy_release, 3906 .__release = floppy_release,
3907 .ioctl = fd_ioctl, 3907 .__ioctl = fd_ioctl,
3908 .getgeo = fd_getgeo, 3908 .getgeo = fd_getgeo,
3909 .media_changed = check_floppy_change, 3909 .media_changed = check_floppy_change,
3910 .revalidate_disk = floppy_revalidate, 3910 .revalidate_disk = floppy_revalidate,
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index d3a25b027ff9..6faca2b7ae37 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -1355,11 +1355,11 @@ static int lo_release(struct inode *inode, struct file *file)
1355 1355
1356static struct block_device_operations lo_fops = { 1356static struct block_device_operations lo_fops = {
1357 .owner = THIS_MODULE, 1357 .owner = THIS_MODULE,
1358 .open = lo_open, 1358 .__open = lo_open,
1359 .release = lo_release, 1359 .__release = lo_release,
1360 .ioctl = lo_ioctl, 1360 .__ioctl = lo_ioctl,
1361#ifdef CONFIG_COMPAT 1361#ifdef CONFIG_COMPAT
1362 .compat_ioctl = lo_compat_ioctl, 1362 .__compat_ioctl = lo_compat_ioctl,
1363#endif 1363#endif
1364}; 1364};
1365 1365
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 9034ca585afd..36015e0945b1 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -691,7 +691,7 @@ static int nbd_ioctl(struct inode *inode, struct file *file,
691static struct block_device_operations nbd_fops = 691static struct block_device_operations nbd_fops =
692{ 692{
693 .owner = THIS_MODULE, 693 .owner = THIS_MODULE,
694 .ioctl = nbd_ioctl, 694 .__ioctl = nbd_ioctl,
695}; 695};
696 696
697/* 697/*
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c
index 8bd557e2a659..6e6dcc1d4328 100644
--- a/drivers/block/paride/pcd.c
+++ b/drivers/block/paride/pcd.c
@@ -252,9 +252,9 @@ static int pcd_block_media_changed(struct gendisk *disk)
252 252
253static struct block_device_operations pcd_bdops = { 253static struct block_device_operations pcd_bdops = {
254 .owner = THIS_MODULE, 254 .owner = THIS_MODULE,
255 .open = pcd_block_open, 255 .__open = pcd_block_open,
256 .release = pcd_block_release, 256 .__release = pcd_block_release,
257 .ioctl = pcd_block_ioctl, 257 .__ioctl = pcd_block_ioctl,
258 .media_changed = pcd_block_media_changed, 258 .media_changed = pcd_block_media_changed,
259}; 259};
260 260
diff --git a/drivers/block/paride/pd.c b/drivers/block/paride/pd.c
index 5fdfa7c888ce..b3023844947c 100644
--- a/drivers/block/paride/pd.c
+++ b/drivers/block/paride/pd.c
@@ -807,9 +807,9 @@ static int pd_revalidate(struct gendisk *p)
807 807
808static struct block_device_operations pd_fops = { 808static struct block_device_operations pd_fops = {
809 .owner = THIS_MODULE, 809 .owner = THIS_MODULE,
810 .open = pd_open, 810 .__open = pd_open,
811 .release = pd_release, 811 .__release = pd_release,
812 .ioctl = pd_ioctl, 812 .__ioctl = pd_ioctl,
813 .getgeo = pd_getgeo, 813 .getgeo = pd_getgeo,
814 .media_changed = pd_check_media, 814 .media_changed = pd_check_media,
815 .revalidate_disk= pd_revalidate 815 .revalidate_disk= pd_revalidate
diff --git a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c
index a902d84fd330..e08ca5161ad8 100644
--- a/drivers/block/paride/pf.c
+++ b/drivers/block/paride/pf.c
@@ -264,9 +264,9 @@ static char *pf_buf; /* buffer for request in progress */
264 264
265static struct block_device_operations pf_fops = { 265static struct block_device_operations pf_fops = {
266 .owner = THIS_MODULE, 266 .owner = THIS_MODULE,
267 .open = pf_open, 267 .__open = pf_open,
268 .release = pf_release, 268 .__release = pf_release,
269 .ioctl = pf_ioctl, 269 .__ioctl = pf_ioctl,
270 .getgeo = pf_getgeo, 270 .getgeo = pf_getgeo,
271 .media_changed = pf_check_media, 271 .media_changed = pf_check_media,
272}; 272};
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index a0ba4023953b..33ac8ddf4912 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -2847,9 +2847,9 @@ static int pkt_media_changed(struct gendisk *disk)
2847 2847
2848static struct block_device_operations pktcdvd_ops = { 2848static struct block_device_operations pktcdvd_ops = {
2849 .owner = THIS_MODULE, 2849 .owner = THIS_MODULE,
2850 .open = pkt_open, 2850 .__open = pkt_open,
2851 .release = pkt_close, 2851 .__release = pkt_close,
2852 .ioctl = pkt_ioctl, 2852 .__ioctl = pkt_ioctl,
2853 .media_changed = pkt_media_changed, 2853 .media_changed = pkt_media_changed,
2854}; 2854};
2855 2855
diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c
index 5c45d5556ae8..9398af86a7aa 100644
--- a/drivers/block/swim3.c
+++ b/drivers/block/swim3.c
@@ -998,9 +998,9 @@ static int floppy_revalidate(struct gendisk *disk)
998} 998}
999 999
1000static struct block_device_operations floppy_fops = { 1000static struct block_device_operations floppy_fops = {
1001 .open = floppy_open, 1001 .__open = floppy_open,
1002 .release = floppy_release, 1002 .__release = floppy_release,
1003 .ioctl = floppy_ioctl, 1003 .__ioctl = floppy_ioctl,
1004 .media_changed = floppy_check_change, 1004 .media_changed = floppy_check_change,
1005 .revalidate_disk= floppy_revalidate, 1005 .revalidate_disk= floppy_revalidate,
1006}; 1006};
diff --git a/drivers/block/ub.c b/drivers/block/ub.c
index bc04330f3683..5261773407da 100644
--- a/drivers/block/ub.c
+++ b/drivers/block/ub.c
@@ -1791,9 +1791,9 @@ static int ub_bd_media_changed(struct gendisk *disk)
1791 1791
1792static struct block_device_operations ub_bd_fops = { 1792static struct block_device_operations ub_bd_fops = {
1793 .owner = THIS_MODULE, 1793 .owner = THIS_MODULE,
1794 .open = ub_bd_open, 1794 .__open = ub_bd_open,
1795 .release = ub_bd_release, 1795 .__release = ub_bd_release,
1796 .ioctl = ub_bd_ioctl, 1796 .__ioctl = ub_bd_ioctl,
1797 .media_changed = ub_bd_media_changed, 1797 .media_changed = ub_bd_media_changed,
1798 .revalidate_disk = ub_bd_revalidate, 1798 .revalidate_disk = ub_bd_revalidate,
1799}; 1799};
diff --git a/drivers/block/viodasd.c b/drivers/block/viodasd.c
index 1730d29e6044..7f7beec29ebb 100644
--- a/drivers/block/viodasd.c
+++ b/drivers/block/viodasd.c
@@ -221,8 +221,8 @@ static int viodasd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
221 */ 221 */
222static struct block_device_operations viodasd_fops = { 222static struct block_device_operations viodasd_fops = {
223 .owner = THIS_MODULE, 223 .owner = THIS_MODULE,
224 .open = viodasd_open, 224 .__open = viodasd_open,
225 .release = viodasd_release, 225 .__release = viodasd_release,
226 .getgeo = viodasd_getgeo, 226 .getgeo = viodasd_getgeo,
227}; 227};
228 228
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 7643cd16fd67..10f157ea7b0b 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -180,7 +180,7 @@ static int virtblk_getgeo(struct block_device *bd, struct hd_geometry *geo)
180} 180}
181 181
182static struct block_device_operations virtblk_fops = { 182static struct block_device_operations virtblk_fops = {
183 .ioctl = virtblk_ioctl, 183 .__ioctl = virtblk_ioctl,
184 .owner = THIS_MODULE, 184 .owner = THIS_MODULE,
185 .getgeo = virtblk_getgeo, 185 .getgeo = virtblk_getgeo,
186}; 186};
diff --git a/drivers/block/xd.c b/drivers/block/xd.c
index 624d30f7da3f..316fa1da4b9c 100644
--- a/drivers/block/xd.c
+++ b/drivers/block/xd.c
@@ -132,7 +132,7 @@ static int xd_getgeo(struct block_device *bdev, struct hd_geometry *geo);
132 132
133static struct block_device_operations xd_fops = { 133static struct block_device_operations xd_fops = {
134 .owner = THIS_MODULE, 134 .owner = THIS_MODULE,
135 .ioctl = xd_ioctl, 135 .__ioctl = xd_ioctl,
136 .getgeo = xd_getgeo, 136 .getgeo = xd_getgeo,
137}; 137};
138static DECLARE_WAIT_QUEUE_HEAD(xd_wait_int); 138static DECLARE_WAIT_QUEUE_HEAD(xd_wait_int);
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 1a50ae70f716..7efac80c8dde 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1041,8 +1041,8 @@ static int blkif_release(struct inode *inode, struct file *filep)
1041static struct block_device_operations xlvbd_block_fops = 1041static struct block_device_operations xlvbd_block_fops =
1042{ 1042{
1043 .owner = THIS_MODULE, 1043 .owner = THIS_MODULE,
1044 .open = blkif_open, 1044 .__open = blkif_open,
1045 .release = blkif_release, 1045 .__release = blkif_release,
1046 .getgeo = blkif_getgeo, 1046 .getgeo = blkif_getgeo,
1047 .ioctl = blkif_ioctl, 1047 .ioctl = blkif_ioctl,
1048}; 1048};
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c
index 4a7a059ebaf7..e4efe5b7ec22 100644
--- a/drivers/block/xsysace.c
+++ b/drivers/block/xsysace.c
@@ -919,8 +919,8 @@ static int ace_getgeo(struct block_device *bdev, struct hd_geometry *geo)
919 919
920static struct block_device_operations ace_fops = { 920static struct block_device_operations ace_fops = {
921 .owner = THIS_MODULE, 921 .owner = THIS_MODULE,
922 .open = ace_open, 922 .__open = ace_open,
923 .release = ace_release, 923 .__release = ace_release,
924 .media_changed = ace_media_changed, 924 .media_changed = ace_media_changed,
925 .revalidate_disk = ace_revalidate_disk, 925 .revalidate_disk = ace_revalidate_disk,
926 .getgeo = ace_getgeo, 926 .getgeo = ace_getgeo,
diff --git a/drivers/block/z2ram.c b/drivers/block/z2ram.c
index be20a67f1fa8..4860d0f36870 100644
--- a/drivers/block/z2ram.c
+++ b/drivers/block/z2ram.c
@@ -314,8 +314,8 @@ z2_release( struct inode *inode, struct file *filp )
314static struct block_device_operations z2_fops = 314static struct block_device_operations z2_fops =
315{ 315{
316 .owner = THIS_MODULE, 316 .owner = THIS_MODULE,
317 .open = z2_open, 317 .__open = z2_open,
318 .release = z2_release, 318 .__release = z2_release,
319}; 319};
320 320
321static struct kobject *z2_find(dev_t dev, int *part, void *data) 321static struct kobject *z2_find(dev_t dev, int *part, void *data)
diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c
index 0959edf2afdb..ab0c637f58be 100644
--- a/drivers/cdrom/gdrom.c
+++ b/drivers/cdrom/gdrom.c
@@ -514,10 +514,10 @@ static int gdrom_bdops_ioctl(struct inode *inode, struct file *file,
514 514
515static struct block_device_operations gdrom_bdops = { 515static struct block_device_operations gdrom_bdops = {
516 .owner = THIS_MODULE, 516 .owner = THIS_MODULE,
517 .open = gdrom_bdops_open, 517 .__open = gdrom_bdops_open,
518 .release = gdrom_bdops_release, 518 .__release = gdrom_bdops_release,
519 .media_changed = gdrom_bdops_mediachanged, 519 .media_changed = gdrom_bdops_mediachanged,
520 .ioctl = gdrom_bdops_ioctl, 520 .__ioctl = gdrom_bdops_ioctl,
521}; 521};
522 522
523static irqreturn_t gdrom_command_interrupt(int irq, void *dev_id) 523static irqreturn_t gdrom_command_interrupt(int irq, void *dev_id)
diff --git a/drivers/cdrom/viocd.c b/drivers/cdrom/viocd.c
index abc4079c3f41..57c2dced3e9d 100644
--- a/drivers/cdrom/viocd.c
+++ b/drivers/cdrom/viocd.c
@@ -180,9 +180,9 @@ static int viocd_blk_media_changed(struct gendisk *disk)
180 180
181struct block_device_operations viocd_fops = { 181struct block_device_operations viocd_fops = {
182 .owner = THIS_MODULE, 182 .owner = THIS_MODULE,
183 .open = viocd_blk_open, 183 .__open = viocd_blk_open,
184 .release = viocd_blk_release, 184 .__release = viocd_blk_release,
185 .ioctl = viocd_blk_ioctl, 185 .__ioctl = viocd_blk_ioctl,
186 .media_changed = viocd_blk_media_changed, 186 .media_changed = viocd_blk_media_changed,
187}; 187};
188 188
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 87d90200b169..3533984355a6 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -2200,9 +2200,9 @@ static int idecd_revalidate_disk(struct gendisk *disk)
2200 2200
2201static struct block_device_operations idecd_ops = { 2201static struct block_device_operations idecd_ops = {
2202 .owner = THIS_MODULE, 2202 .owner = THIS_MODULE,
2203 .open = idecd_open, 2203 .__open = idecd_open,
2204 .release = idecd_release, 2204 .__release = idecd_release,
2205 .ioctl = idecd_ioctl, 2205 .__ioctl = idecd_ioctl,
2206 .media_changed = idecd_media_changed, 2206 .media_changed = idecd_media_changed,
2207 .revalidate_disk = idecd_revalidate_disk 2207 .revalidate_disk = idecd_revalidate_disk
2208}; 2208};
diff --git a/drivers/ide/ide-gd.c b/drivers/ide/ide-gd.c
index 948af08abe23..d118bbed7cd3 100644
--- a/drivers/ide/ide-gd.c
+++ b/drivers/ide/ide-gd.c
@@ -298,9 +298,9 @@ static int ide_gd_ioctl(struct inode *inode, struct file *file,
298 298
299static struct block_device_operations ide_gd_ops = { 299static struct block_device_operations ide_gd_ops = {
300 .owner = THIS_MODULE, 300 .owner = THIS_MODULE,
301 .open = ide_gd_open, 301 .__open = ide_gd_open,
302 .release = ide_gd_release, 302 .__release = ide_gd_release,
303 .ioctl = ide_gd_ioctl, 303 .__ioctl = ide_gd_ioctl,
304 .getgeo = ide_gd_getgeo, 304 .getgeo = ide_gd_getgeo,
305 .media_changed = ide_gd_media_changed, 305 .media_changed = ide_gd_media_changed,
306 .revalidate_disk = ide_gd_revalidate_disk 306 .revalidate_disk = ide_gd_revalidate_disk
diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c
index 2b263281ffea..c5df53c4838c 100644
--- a/drivers/ide/ide-tape.c
+++ b/drivers/ide/ide-tape.c
@@ -2376,9 +2376,9 @@ static int idetape_ioctl(struct inode *inode, struct file *file,
2376 2376
2377static struct block_device_operations idetape_block_ops = { 2377static struct block_device_operations idetape_block_ops = {
2378 .owner = THIS_MODULE, 2378 .owner = THIS_MODULE,
2379 .open = idetape_open, 2379 .__open = idetape_open,
2380 .release = idetape_release, 2380 .__release = idetape_release,
2381 .ioctl = idetape_ioctl, 2381 .__ioctl = idetape_ioctl,
2382}; 2382};
2383 2383
2384static int ide_tape_probe(ide_drive_t *drive) 2384static int ide_tape_probe(ide_drive_t *drive)
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 5f0f4c8bcd3e..8b4c92b1b6db 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1698,9 +1698,9 @@ int dm_noflush_suspending(struct dm_target *ti)
1698EXPORT_SYMBOL_GPL(dm_noflush_suspending); 1698EXPORT_SYMBOL_GPL(dm_noflush_suspending);
1699 1699
1700static struct block_device_operations dm_blk_dops = { 1700static struct block_device_operations dm_blk_dops = {
1701 .open = dm_blk_open, 1701 .__open = dm_blk_open,
1702 .release = dm_blk_close, 1702 .__release = dm_blk_close,
1703 .ioctl = dm_blk_ioctl, 1703 .__ioctl = dm_blk_ioctl,
1704 .getgeo = dm_blk_getgeo, 1704 .getgeo = dm_blk_getgeo,
1705 .owner = THIS_MODULE 1705 .owner = THIS_MODULE
1706}; 1706};
diff --git a/drivers/md/md.c b/drivers/md/md.c
index aaa3d465de4e..21b04d39ba3b 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -5046,9 +5046,9 @@ static int md_revalidate(struct gendisk *disk)
5046static struct block_device_operations md_fops = 5046static struct block_device_operations md_fops =
5047{ 5047{
5048 .owner = THIS_MODULE, 5048 .owner = THIS_MODULE,
5049 .open = md_open, 5049 .__open = md_open,
5050 .release = md_release, 5050 .__release = md_release,
5051 .ioctl = md_ioctl, 5051 .__ioctl = md_ioctl,
5052 .getgeo = md_getgeo, 5052 .getgeo = md_getgeo,
5053 .media_changed = md_media_changed, 5053 .media_changed = md_media_changed,
5054 .revalidate_disk= md_revalidate, 5054 .revalidate_disk= md_revalidate,
diff --git a/drivers/memstick/core/mspro_block.c b/drivers/memstick/core/mspro_block.c
index 5263913e0c69..fbe5919789d0 100644
--- a/drivers/memstick/core/mspro_block.c
+++ b/drivers/memstick/core/mspro_block.c
@@ -237,8 +237,8 @@ static int mspro_block_bd_getgeo(struct block_device *bdev,
237} 237}
238 238
239static struct block_device_operations ms_block_bdops = { 239static struct block_device_operations ms_block_bdops = {
240 .open = mspro_block_bd_open, 240 .__open = mspro_block_bd_open,
241 .release = mspro_block_bd_release, 241 .__release = mspro_block_bd_release,
242 .getgeo = mspro_block_bd_getgeo, 242 .getgeo = mspro_block_bd_getgeo,
243 .owner = THIS_MODULE 243 .owner = THIS_MODULE
244}; 244};
diff --git a/drivers/message/i2o/i2o_block.c b/drivers/message/i2o/i2o_block.c
index 81483de8c0fd..71500dda8eb3 100644
--- a/drivers/message/i2o/i2o_block.c
+++ b/drivers/message/i2o/i2o_block.c
@@ -931,9 +931,9 @@ static void i2o_block_request_fn(struct request_queue *q)
931/* I2O Block device operations definition */ 931/* I2O Block device operations definition */
932static struct block_device_operations i2o_block_fops = { 932static struct block_device_operations i2o_block_fops = {
933 .owner = THIS_MODULE, 933 .owner = THIS_MODULE,
934 .open = i2o_block_open, 934 .__open = i2o_block_open,
935 .release = i2o_block_release, 935 .__release = i2o_block_release,
936 .ioctl = i2o_block_ioctl, 936 .__ioctl = i2o_block_ioctl,
937 .getgeo = i2o_block_getgeo, 937 .getgeo = i2o_block_getgeo,
938 .media_changed = i2o_block_media_changed 938 .media_changed = i2o_block_media_changed
939}; 939};
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index 24c97d3d16bb..8cba06f5e11d 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -130,8 +130,8 @@ mmc_blk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
130} 130}
131 131
132static struct block_device_operations mmc_bdops = { 132static struct block_device_operations mmc_bdops = {
133 .open = mmc_blk_open, 133 .__open = mmc_blk_open,
134 .release = mmc_blk_release, 134 .__release = mmc_blk_release,
135 .getgeo = mmc_blk_getgeo, 135 .getgeo = mmc_blk_getgeo,
136 .owner = THIS_MODULE, 136 .owner = THIS_MODULE,
137}; 137};
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
index 681d5aca2af4..b00d07c53753 100644
--- a/drivers/mtd/mtd_blkdevs.c
+++ b/drivers/mtd/mtd_blkdevs.c
@@ -213,9 +213,9 @@ static int blktrans_ioctl(struct inode *inode, struct file *file,
213 213
214static struct block_device_operations mtd_blktrans_ops = { 214static struct block_device_operations mtd_blktrans_ops = {
215 .owner = THIS_MODULE, 215 .owner = THIS_MODULE,
216 .open = blktrans_open, 216 .__open = blktrans_open,
217 .release = blktrans_release, 217 .__release = blktrans_release,
218 .ioctl = blktrans_ioctl, 218 .__ioctl = blktrans_ioctl,
219 .getgeo = blktrans_getgeo, 219 .getgeo = blktrans_getgeo,
220}; 220};
221 221
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 0a225ccda026..6bf68e5fe89f 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -2087,10 +2087,10 @@ static int dasd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
2087struct block_device_operations 2087struct block_device_operations
2088dasd_device_operations = { 2088dasd_device_operations = {
2089 .owner = THIS_MODULE, 2089 .owner = THIS_MODULE,
2090 .open = dasd_open, 2090 .__open = dasd_open,
2091 .release = dasd_release, 2091 .__release = dasd_release,
2092 .ioctl = dasd_ioctl, 2092 .__ioctl = dasd_ioctl,
2093 .compat_ioctl = dasd_compat_ioctl, 2093 .__compat_ioctl = dasd_compat_ioctl,
2094 .getgeo = dasd_getgeo, 2094 .getgeo = dasd_getgeo,
2095}; 2095};
2096 2096
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
index a7ff167d5b81..413460cc3dd8 100644
--- a/drivers/s390/block/dcssblk.c
+++ b/drivers/s390/block/dcssblk.c
@@ -42,8 +42,8 @@ static char dcssblk_segments[DCSSBLK_PARM_LEN] = "\0";
42static int dcssblk_major; 42static int dcssblk_major;
43static struct block_device_operations dcssblk_devops = { 43static struct block_device_operations dcssblk_devops = {
44 .owner = THIS_MODULE, 44 .owner = THIS_MODULE,
45 .open = dcssblk_open, 45 .__open = dcssblk_open,
46 .release = dcssblk_release, 46 .__release = dcssblk_release,
47 .direct_access = dcssblk_direct_access, 47 .direct_access = dcssblk_direct_access,
48}; 48};
49 49
diff --git a/drivers/s390/char/tape_block.c b/drivers/s390/char/tape_block.c
index a25b8bf54f41..f1a741c9a6f0 100644
--- a/drivers/s390/char/tape_block.c
+++ b/drivers/s390/char/tape_block.c
@@ -52,9 +52,9 @@ static int tapeblock_revalidate_disk(struct gendisk *);
52 52
53static struct block_device_operations tapeblock_fops = { 53static struct block_device_operations tapeblock_fops = {
54 .owner = THIS_MODULE, 54 .owner = THIS_MODULE,
55 .open = tapeblock_open, 55 .__open = tapeblock_open,
56 .release = tapeblock_release, 56 .__release = tapeblock_release,
57 .ioctl = tapeblock_ioctl, 57 .__ioctl = tapeblock_ioctl,
58 .media_changed = tapeblock_medium_changed, 58 .media_changed = tapeblock_medium_changed,
59 .revalidate_disk = tapeblock_revalidate_disk, 59 .revalidate_disk = tapeblock_revalidate_disk,
60}; 60};
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index 5bcc04e82c28..9069afbad9d3 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -483,9 +483,9 @@ static int idescsi_ide_ioctl(struct inode *inode, struct file *file,
483 483
484static struct block_device_operations idescsi_ops = { 484static struct block_device_operations idescsi_ops = {
485 .owner = THIS_MODULE, 485 .owner = THIS_MODULE,
486 .open = idescsi_ide_open, 486 .__open = idescsi_ide_open,
487 .release = idescsi_ide_release, 487 .__release = idescsi_ide_release,
488 .ioctl = idescsi_ide_ioctl, 488 .__ioctl = idescsi_ide_ioctl,
489}; 489};
490 490
491static int idescsi_slave_configure(struct scsi_device * sdp) 491static int idescsi_slave_configure(struct scsi_device * sdp)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 5a18528a69d0..c8b95e8d2859 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -962,12 +962,12 @@ static long sd_compat_ioctl(struct file *file, unsigned int cmd, unsigned long a
962 962
963static struct block_device_operations sd_fops = { 963static struct block_device_operations sd_fops = {
964 .owner = THIS_MODULE, 964 .owner = THIS_MODULE,
965 .open = sd_open, 965 .__open = sd_open,
966 .release = sd_release, 966 .__release = sd_release,
967 .ioctl = sd_ioctl, 967 .__ioctl = sd_ioctl,
968 .getgeo = sd_getgeo, 968 .getgeo = sd_getgeo,
969#ifdef CONFIG_COMPAT 969#ifdef CONFIG_COMPAT
970 .compat_ioctl = sd_compat_ioctl, 970 .__compat_ioctl = sd_compat_ioctl,
971#endif 971#endif
972 .media_changed = sd_media_changed, 972 .media_changed = sd_media_changed,
973 .revalidate_disk = sd_revalidate_disk, 973 .revalidate_disk = sd_revalidate_disk,
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 2fb8d4d2d6f6..9446cbf4de84 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -540,9 +540,9 @@ static int sr_block_media_changed(struct gendisk *disk)
540static struct block_device_operations sr_bdops = 540static struct block_device_operations sr_bdops =
541{ 541{
542 .owner = THIS_MODULE, 542 .owner = THIS_MODULE,
543 .open = sr_block_open, 543 .__open = sr_block_open,
544 .release = sr_block_release, 544 .__release = sr_block_release,
545 .ioctl = sr_block_ioctl, 545 .__ioctl = sr_block_ioctl,
546 .media_changed = sr_block_media_changed, 546 .media_changed = sr_block_media_changed,
547 /* 547 /*
548 * No compat_ioctl for now because sr_block_ioctl never 548 * No compat_ioctl for now because sr_block_ioctl never
diff --git a/fs/block_dev.c b/fs/block_dev.c
index b9022694e9f7..73b6ce47c861 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1033,8 +1033,13 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part)
1033 bdev->bd_contains = bdev; 1033 bdev->bd_contains = bdev;
1034 if (!partno) { 1034 if (!partno) {
1035 struct backing_dev_info *bdi; 1035 struct backing_dev_info *bdi;
1036 if (disk->fops->__open) {
1037 ret = disk->fops->__open(bdev->bd_inode, file);
1038 if (ret)
1039 goto out_first;
1040 }
1036 if (disk->fops->open) { 1041 if (disk->fops->open) {
1037 ret = disk->fops->open(bdev->bd_inode, file); 1042 ret = disk->fops->open(bdev, file->f_mode);
1038 if (ret) 1043 if (ret)
1039 goto out_clear; 1044 goto out_clear;
1040 } 1045 }
@@ -1074,8 +1079,13 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part)
1074 part = NULL; 1079 part = NULL;
1075 disk = NULL; 1080 disk = NULL;
1076 if (bdev->bd_contains == bdev) { 1081 if (bdev->bd_contains == bdev) {
1082 if (bdev->bd_disk->fops->__open) {
1083 ret = bdev->bd_disk->fops->__open(bdev->bd_inode, file);
1084 if (ret)
1085 goto out;
1086 }
1077 if (bdev->bd_disk->fops->open) { 1087 if (bdev->bd_disk->fops->open) {
1078 ret = bdev->bd_disk->fops->open(bdev->bd_inode, file); 1088 ret = bdev->bd_disk->fops->open(bdev, file->f_mode);
1079 if (ret) 1089 if (ret)
1080 goto out_unlock_bdev; 1090 goto out_unlock_bdev;
1081 } 1091 }
@@ -1184,8 +1194,10 @@ static int __blkdev_put(struct block_device *bdev, int for_part)
1184 kill_bdev(bdev); 1194 kill_bdev(bdev);
1185 } 1195 }
1186 if (bdev->bd_contains == bdev) { 1196 if (bdev->bd_contains == bdev) {
1197 if (disk->fops->__release)
1198 ret = disk->fops->__release(bd_inode, NULL);
1187 if (disk->fops->release) 1199 if (disk->fops->release)
1188 ret = disk->fops->release(bd_inode, NULL); 1200 ret = disk->fops->release(disk, 0);
1189 } 1201 }
1190 if (!bdev->bd_openers) { 1202 if (!bdev->bd_openers) {
1191 struct module *owner = disk->fops->owner; 1203 struct module *owner = disk->fops->owner;
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 2bad616b9949..b573186ff1a1 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1061,11 +1061,16 @@ struct file;
1061struct inode; 1061struct inode;
1062 1062
1063struct block_device_operations { 1063struct block_device_operations {
1064 int (*open) (struct inode *, struct file *); 1064 int (*__open) (struct inode *, struct file *);
1065 int (*release) (struct inode *, struct file *); 1065 int (*__release) (struct inode *, struct file *);
1066 int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long); 1066 int (*__ioctl) (struct inode *, struct file *, unsigned, unsigned long);
1067 long (*unlocked_ioctl) (struct file *, unsigned, unsigned long); 1067 long (*__unlocked_ioctl) (struct file *, unsigned, unsigned long);
1068 long (*compat_ioctl) (struct file *, unsigned, unsigned long); 1068 long (*__compat_ioctl) (struct file *, unsigned, unsigned long);
1069 int (*open) (struct block_device *, fmode_t);
1070 int (*release) (struct gendisk *, fmode_t);
1071 int (*locked_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1072 int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1073 int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
1069 int (*direct_access) (struct block_device *, sector_t, 1074 int (*direct_access) (struct block_device *, sector_t,
1070 void **, unsigned long *); 1075 void **, unsigned long *);
1071 int (*media_changed) (struct gendisk *); 1076 int (*media_changed) (struct gendisk *);
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 58bbf689fef7..b5894604ba5e 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -79,6 +79,7 @@ extern int dir_notify_enable;
79#define FMODE_NDELAY ((__force fmode_t)32) 79#define FMODE_NDELAY ((__force fmode_t)32)
80#define FMODE_EXCL ((__force fmode_t)64) 80#define FMODE_EXCL ((__force fmode_t)64)
81#define FMODE_WRITE_IOCTL ((__force fmode_t)128) 81#define FMODE_WRITE_IOCTL ((__force fmode_t)128)
82#define FMODE_NDELAY_NOW ((__force fmode_t)256)
82 83
83#define RW_MASK 1 84#define RW_MASK 1
84#define RWA_MASK 2 85#define RWA_MASK 2