---

 drivers/block/floppy.c   |    3 +--
 drivers/block/floppy98.c |    3 +--
 fs/block_dev.c           |   10 +++++-----
 3 files changed, 7 insertions(+), 9 deletions(-)

diff -puN drivers/block/floppy98.c~RD1-open-mm drivers/block/floppy98.c
--- 25/drivers/block/floppy98.c~RD1-open-mm	2004-01-07 19:05:47.000000000 -0800
+++ 25-akpm/drivers/block/floppy98.c	2004-01-07 19:05:47.000000000 -0800
@@ -3859,8 +3859,7 @@ static int floppy_open(struct inode * in
 	/* Allow ioctls if we have write-permissions even if read-only open.
 	 * Needed so that programs such as fdrawcmd still can work on write
 	 * protected disks */
-	if ((filp->f_mode & 2) || 
-	    (inode->i_sb && (permission(inode,2) == 0)))
+	if (filp->f_mode & 2 || permission(filp->f_dentry->d_inode,2,NULL) == 0)
 	    filp->private_data = (void*) 8;
 
 	if (UFDCS->rawcmd == 1)
diff -puN drivers/block/floppy.c~RD1-open-mm drivers/block/floppy.c
--- 25/drivers/block/floppy.c~RD1-open-mm	2004-01-07 19:05:47.000000000 -0800
+++ 25-akpm/drivers/block/floppy.c	2004-01-07 19:05:47.000000000 -0800
@@ -3784,8 +3784,7 @@ static int floppy_open(struct inode * in
 	/* Allow ioctls if we have write-permissions even if read-only open.
 	 * Needed so that programs such as fdrawcmd still can work on write
 	 * protected disks */
-	if ((filp->f_mode & 2) || 
-	    (inode->i_sb && (permission(inode,2, NULL) == 0)))
+	if (filp->f_mode & 2 || permission(filp->f_dentry->d_inode,2,NULL) == 0)
 	    filp->private_data = (void*) 8;
 
 	if (UFDCS->rawcmd == 1)
diff -puN fs/block_dev.c~RD1-open-mm fs/block_dev.c
--- 25/fs/block_dev.c~RD1-open-mm	2004-01-07 19:05:47.000000000 -0800
+++ 25-akpm/fs/block_dev.c	2004-01-07 19:05:47.000000000 -0800
@@ -531,7 +531,7 @@ static void bd_set_size(struct block_dev
 	bdev->bd_inode->i_blkbits = blksize_bits(bsize);
 }
 
-static int do_open(struct block_device *bdev, struct inode *inode, struct file *file)
+static int do_open(struct block_device *bdev, struct file *file)
 {
 	struct module *owner = NULL;
 	struct gendisk *disk;
@@ -554,7 +554,7 @@ static int do_open(struct block_device *
 		if (!part) {
 			struct backing_dev_info *bdi;
 			if (disk->fops->open) {
-				ret = disk->fops->open(inode, file);
+				ret = disk->fops->open(bdev->bd_inode, file);
 				if (ret)
 					goto out_first;
 			}
@@ -599,7 +599,7 @@ static int do_open(struct block_device *
 		module_put(owner);
 		if (bdev->bd_contains == bdev) {
 			if (bdev->bd_disk->fops->open) {
-				ret = bdev->bd_disk->fops->open(inode, file);
+				ret = bdev->bd_disk->fops->open(bdev->bd_inode, file);
 				if (ret)
 					goto out;
 			}
@@ -647,7 +647,7 @@ int blkdev_get(struct block_device *bdev
 	fake_file.f_dentry = &fake_dentry;
 	fake_dentry.d_inode = bdev->bd_inode;
 
-	return do_open(bdev, bdev->bd_inode, &fake_file);
+	return do_open(bdev, &fake_file);
 }
 
 EXPORT_SYMBOL(blkdev_get);
@@ -668,7 +668,7 @@ int blkdev_open(struct inode * inode, st
 	bd_acquire(inode);
 	bdev = inode->i_bdev;
 
-	res = do_open(bdev, inode, filp);
+	res = do_open(bdev, filp);
 	if (res)
 		return res;
 

_