--- 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; _