25-akpm/arch/um/drivers/ubd_kern.c      |    6 +++---
 25-akpm/drivers/acorn/block/fd1772.c    |   19 +++++++++++--------
 25-akpm/drivers/block/DAC960.c          |    6 +++---
 25-akpm/drivers/block/acsi.c            |   15 +++++++--------
 25-akpm/drivers/block/amiflop.c         |    9 +++++----
 25-akpm/drivers/block/ataflop.c         |   11 +++++------
 25-akpm/drivers/block/cciss.c           |   12 ++++++------
 25-akpm/drivers/block/cpqarray.c        |   10 +++++-----
 25-akpm/drivers/block/floppy.c          |   19 +++++++++----------
 25-akpm/drivers/block/floppy98.c        |   20 +++++++++-----------
 25-akpm/drivers/block/loop.c            |    4 ++--
 25-akpm/drivers/block/paride/pcd.c      |    6 +++---
 25-akpm/drivers/block/paride/pd.c       |    8 +++-----
 25-akpm/drivers/block/paride/pf.c       |    6 +++---
 25-akpm/drivers/block/rd.c              |    7 +++----
 25-akpm/drivers/block/swim3.c           |    8 ++++----
 25-akpm/drivers/block/swim_iop.c        |    8 ++++----
 25-akpm/drivers/block/umem.c            |    1 -
 25-akpm/drivers/block/z2ram.c           |    5 ++---
 25-akpm/drivers/cdrom/aztcd.c           |    4 ++--
 25-akpm/drivers/cdrom/cdu31a.c          |    4 ++--
 25-akpm/drivers/cdrom/cm206.c           |    4 ++--
 25-akpm/drivers/cdrom/gscd.c            |    4 ++--
 25-akpm/drivers/cdrom/mcd.c             |    4 ++--
 25-akpm/drivers/cdrom/mcdx.c            |    6 +++---
 25-akpm/drivers/cdrom/optcd.c           |    2 +-
 25-akpm/drivers/cdrom/sbpcd.c           |    6 +++---
 25-akpm/drivers/cdrom/sjcd.c            |    2 +-
 25-akpm/drivers/cdrom/sonycd535.c       |    8 +++-----
 25-akpm/drivers/ide/ide-cd.c            |    6 +++---
 25-akpm/drivers/ide/ide-disk.c          |    6 +++---
 25-akpm/drivers/ide/ide-floppy.c        |    6 +++---
 25-akpm/drivers/ide/ide-tape.c          |    4 ++--
 25-akpm/drivers/ide/ide.c               |    2 +-
 25-akpm/drivers/md/dm.c                 |    6 ++----
 25-akpm/drivers/md/md.c                 |    6 +++---
 25-akpm/drivers/message/i2o/i2o_block.c |    4 ++--
 25-akpm/drivers/mtd/mtd_blkdevs.c       |    8 +++-----
 25-akpm/drivers/s390/block/dasd.c       |    4 ++--
 25-akpm/drivers/s390/char/tape_block.c  |    6 +++---
 25-akpm/drivers/scsi/ide-scsi.c         |    4 ++--
 25-akpm/drivers/scsi/sd.c               |    6 +++---
 25-akpm/drivers/scsi/sr.c               |    6 +++---
 25-akpm/fs/block_dev.c                  |   10 +++++-----
 25-akpm/include/linux/fs.h              |    2 +-
 45 files changed, 149 insertions(+), 161 deletions(-)

diff -puN arch/um/drivers/ubd_kern.c~RD4-open-B6 arch/um/drivers/ubd_kern.c
--- 25/arch/um/drivers/ubd_kern.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/arch/um/drivers/ubd_kern.c	Thu Oct  9 01:44:32 2003
@@ -49,7 +49,7 @@ static spinlock_t ubd_lock = SPIN_LOCK_U
 
 static void (*do_ubd)(void);
 
-static int ubd_open(struct inode * inode, struct file * filp);
+static int ubd_open(struct block_device *bdev, struct file * filp);
 static int ubd_release(struct inode * inode, struct file * file);
 static int ubd_ioctl(struct block_device *bdev, struct file * file,
 		     unsigned int cmd, unsigned long arg);
@@ -710,9 +710,9 @@ int ubd_driver_init(void){
 
 device_initcall(ubd_driver_init);
 
-static int ubd_open(struct inode *inode, struct file *filp)
+static int ubd_open(struct block_device *bdev, struct file *filp)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	struct ubd *dev = disk->private_data;
 	int err = -EISDIR;
 
diff -puN drivers/acorn/block/fd1772.c~RD4-open-B6 drivers/acorn/block/fd1772.c
--- 25/drivers/acorn/block/fd1772.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/acorn/block/fd1772.c	Thu Oct  9 01:44:32 2003
@@ -370,7 +370,7 @@ static int fd_ioctl(struct block_device 
 static void fd_probe(int drive);
 static int fd_test_drive_present(int drive);
 static void config_types(void);
-static int floppy_open(struct inode *inode, struct file *filp);
+static int floppy_open(struct block_device *bdev, struct file *filp);
 static int floppy_release(struct inode *inode, struct file *filp);
 static void do_fd_request(request_queue_t *);
 
@@ -1451,10 +1451,11 @@ static void config_types(void)
  * drive with different device numbers.
  */
 
-static int floppy_open(struct inode *inode, struct file *filp)
+static int floppy_open(struct block_device *bdev, struct file *filp)
 {
-	int drive = iminor(inode) & 3;
-	int type =  iminor(inode) >> 2;
+	struct archy_floppy_struct *p = bdev->bd_disk->private_data;
+	int drive = p - unit;
+	int type =  MINOR(bdev->bd_dev) >> 2;
 	int old_dev = fd_device[drive];
 
 	if (fd_ref[drive] && old_dev != type)
@@ -1474,10 +1475,13 @@ static int floppy_open(struct inode *ino
 		return 0;
 
 	if (filp->f_mode & 3) {
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 		if (filp->f_mode & 2) {
-			if (unit[drive].wpstat) {
-				floppy_release(inode, filp);
+			if (p->wpstat) {
+				if (fd_ref[drive] < 0)
+					fd_ref[drive] = 0;
+				else
+					fd_ref[drive]--;
 				return -EROFS;
 			}
 		}
@@ -1485,7 +1489,6 @@ static int floppy_open(struct inode *ino
 	return 0;
 }
 
-
 static int floppy_release(struct inode *inode, struct file *filp)
 {
 	int drive = iminor(inode) & 3;
diff -puN drivers/block/acsi.c~RD4-open-B6 drivers/block/acsi.c
--- 25/drivers/block/acsi.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/acsi.c	Thu Oct  9 01:44:32 2003
@@ -361,7 +361,7 @@ static void do_acsi_request( request_que
 static void redo_acsi_request( void );
 static int acsi_ioctl(struct block_device *bdev, struct file *file, unsigned int
                        cmd, unsigned long arg );
-static int acsi_open( struct inode * inode, struct file * filp );
+static int acsi_open(struct block_device *bdev, struct file *filp);
 static int acsi_release( struct inode * inode, struct file * file );
 static void acsi_prevent_removal(struct acsi_info_struct *aip, int flag );
 static int acsi_change_blk_size( int target, int lun);
@@ -1126,16 +1126,16 @@ static int acsi_ioctl(struct block_devic
  *
  */
 
-static int acsi_open( struct inode * inode, struct file * filp )
+static int acsi_open(struct block_device *bdev, struct file *filp)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	struct acsi_info_struct *aip = disk->private_data;
 
 	if (aip->access_count == 0 && aip->removable) {
 #if 0
 		aip->changed = 1;	/* safety first */
 #endif
-		check_disk_change( inode->i_bdev );
+		check_disk_change(bdev);
 		if (aip->changed)	/* revalidate was not successful (no medium) */
 			return -ENXIO;
 		acsi_prevent_removal(aip, 1);
@@ -1143,10 +1143,11 @@ static int acsi_open( struct inode * ino
 	aip->access_count++;
 
 	if (filp && filp->f_mode) {
-		check_disk_change( inode->i_bdev );
+		check_disk_change(bdev);
 		if (filp->f_mode & 2) {
 			if (aip->read_only) {
-				acsi_release( inode, filp );
+				if (--aip->access_count == 0 && aip->removable)
+					acsi_prevent_removal(aip, 0);
 				return -EROFS;
 			}
 		}
@@ -1328,8 +1329,6 @@ static int acsi_mode_sense( int target, 
  ********************************************************************/
 
 
-extern struct block_device_operations acsi_fops;
-
 static struct gendisk *acsi_gendisk[MAX_DEV];
 
 #define MAX_SCSI_DEVICE_CODE 10
diff -puN drivers/block/amiflop.c~RD4-open-B6 drivers/block/amiflop.c
--- 25/drivers/block/amiflop.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/amiflop.c	Thu Oct  9 01:44:32 2003
@@ -1560,10 +1560,11 @@ static void fd_probe(int dev)
  * /dev/PS0 etc), and disallows simultaneous access to the same
  * drive with different device numbers.
  */
-static int floppy_open(struct inode *inode, struct file *filp)
+static int floppy_open(struct block_device *bdev, struct file *filp)
 {
-	int drive = iminor(inode) & 3;
-	int system =  (iminor(inode) & 4) >> 2;
+	struct amiga_floppy_struct *p = bdev->bd_disk->private_data;
+	int drive = p - unit;
+	int system =  (MINOR(bdev->bd_dev) & 4) >> 2;
 	int old_dev;
 	unsigned long flags;
 
@@ -1573,7 +1574,7 @@ static int floppy_open(struct inode *ino
 		return -EBUSY;
 
 	if (filp && filp->f_mode & 3) {
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 		if (filp->f_mode & 2 ) {
 			int wrprot;
 
diff -puN drivers/block/ataflop.c~RD4-open-B6 drivers/block/ataflop.c
--- 25/drivers/block/ataflop.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/ataflop.c	Thu Oct  9 01:44:32 2003
@@ -369,7 +369,7 @@ static int fd_ioctl(struct block_device 
 static void fd_probe( int drive );
 static int fd_test_drive_present( int drive );
 static void config_types( void );
-static int floppy_open( struct inode *inode, struct file *filp );
+static int floppy_open(struct block_device *bdev, struct file *filp );
 static int floppy_release( struct inode * inode, struct file * filp );
 
 /************************* End of Prototypes **************************/
@@ -1816,10 +1816,10 @@ static void __init config_types( void )
  * drive with different device numbers.
  */
 
-static int floppy_open( struct inode *inode, struct file *filp )
+static int floppy_open(struct block_device *bdev, struct file *filp )
 {
-	struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data;
-	int type  = iminor(inode) >> 2;
+	struct atari_floppy_struct *p = bdev->bd_disk->private_data;
+	int type  = MINOR(bdev->bd_dev) >> 2;
 
 	DPRINT(("fd_open: type=%d\n",type));
 	if (p->ref && p->type != type)
@@ -1839,14 +1839,13 @@ static int floppy_open( struct inode *in
 		return 0;
 
 	if (filp->f_mode & 3) {
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 		if (filp->f_mode & 2) {
 			if (p->wpstat) {
 				if (p->ref < 0)
 					p->ref = 0;
 				else
 					p->ref--;
-				floppy_release(inode, filp);
 				return -EROFS;
 			}
 		}
diff -puN drivers/block/cciss.c~RD4-open-B6 drivers/block/cciss.c
--- 25/drivers/block/cciss.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/cciss.c	Thu Oct  9 01:44:32 2003
@@ -112,7 +112,7 @@ static struct board_type products[] = {
 static ctlr_info_t *hba[MAX_CTLR];
 
 static void do_cciss_request(request_queue_t *q);
-static int cciss_open(struct inode *inode, struct file *filep);
+static int cciss_open(struct block_device *bdev, struct file *filep);
 static int cciss_release(struct inode *inode, struct file *filep);
 static int cciss_ioctl(struct block_device *bdev, struct file *filep, 
 		unsigned int cmd, unsigned long arg);
@@ -362,13 +362,13 @@ static inline drive_info_struct *get_drv
 /*
  * Open.  Make sure the device is really there.
  */
-static int cciss_open(struct inode *inode, struct file *filep)
+static int cciss_open(struct block_device *bdev, struct file *filep)
 {
-	ctlr_info_t *host = get_host(inode->i_bdev->bd_disk);
-	drive_info_struct *drv = get_drv(inode->i_bdev->bd_disk);
+	ctlr_info_t *host = get_host(bdev->bd_disk);
+	drive_info_struct *drv = get_drv(bdev->bd_disk);
 
 #ifdef CCISS_DEBUG
-	printk(KERN_DEBUG "cciss_open %s\n", inode->i_bdev->bd_disk->disk_name);
+	printk(KERN_DEBUG "cciss_open %s\n", bdev->bd_disk->disk_name);
 #endif /* CCISS_DEBUG */ 
 
 	/*
@@ -378,7 +378,7 @@ static int cciss_open(struct inode *inod
 	 * for "raw controller".
 	 */
 	if (drv->nr_blocks == 0) {
-		if (iminor(inode) != 0)
+		if (bdev != bdev->bd_contains || drv != host->drv)
 			return -ENXIO;
 		if (!capable(CAP_SYS_ADMIN))
 			return -EPERM;
diff -puN drivers/block/cpqarray.c~RD4-open-B6 drivers/block/cpqarray.c
--- 25/drivers/block/cpqarray.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/cpqarray.c	Thu Oct  9 01:44:32 2003
@@ -128,7 +128,7 @@ static int sendcmd(
 	unsigned int blkcnt,
 	unsigned int log_unit );
 
-static int ida_open(struct inode *inode, struct file *filep);
+static int ida_open(struct block_device *bdev, struct file *filep);
 static int ida_release(struct inode *inode, struct file *filep);
 static int ida_ioctl(struct block_device *bdev, struct file *filep, unsigned int cmd, unsigned long arg);
 static int ida_ctlr_ioctl(ctlr_info_t *h, int dsk, ida_ioctl_t *io);
@@ -715,12 +715,12 @@ DBGINFO(
 /*
  * Open.  Make sure the device is really there.
  */
-static int ida_open(struct inode *inode, struct file *filep)
+static int ida_open(struct block_device *bdev, struct file *filep)
 {
-	drv_info_t *drv = get_drv(inode->i_bdev->bd_disk);
-	ctlr_info_t *host = get_host(inode->i_bdev->bd_disk);
+	drv_info_t *drv = get_drv(bdev->bd_disk);
+	ctlr_info_t *host = get_host(bdev->bd_disk);
 
-	DBGINFO(printk("ida_open %s\n", inode->i_bdev->bd_disk->disk_name));
+	DBGINFO(printk("ida_open %s\n", bdev->bd_disk->disk_name));
 	/*
 	 * Root is allowed to open raw volume zero even if it's not configured
 	 * so array config can still work.  I don't think I really like this,
diff -puN drivers/block/DAC960.c~RD4-open-B6 drivers/block/DAC960.c
--- 25/drivers/block/DAC960.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/DAC960.c	Thu Oct  9 01:44:32 2003
@@ -67,9 +67,9 @@ static long disk_size(DAC960_Controller_
 	}
 }
 
-static int DAC960_open(struct inode *inode, struct file *file)
+static int DAC960_open(struct block_device *bdev, struct file *file)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	DAC960_Controller_T *p = disk->queue->queuedata;
 	int drive_nr = (long)disk->private_data;
 
@@ -84,7 +84,7 @@ static int DAC960_open(struct inode *ino
 			return -ENXIO;
 	}
 
-	check_disk_change(inode->i_bdev);
+	check_disk_change(bdev);
 
 	if (!get_capacity(p->disks[drive_nr]))
 		return -ENXIO;
diff -puN drivers/block/floppy98.c~RD4-open-B6 drivers/block/floppy98.c
--- 25/drivers/block/floppy98.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/floppy98.c	Thu Oct  9 01:44:32 2003
@@ -3758,11 +3758,10 @@ static int floppy_release(struct inode *
  * /dev/PS0 etc), and disallows simultaneous access to the same
  * drive with different device numbers.
  */
-#define RETERR(x) do{floppy_release(inode,filp); return -(x);}while(0)
 
-static int floppy_open(struct inode * inode, struct file * filp)
+static int floppy_open(struct block_device *bdev, struct file *filp)
 {
-	int drive = (long)inode->i_bdev->bd_disk->private_data;
+	int drive = (long)bdev->bd_disk->private_data;
 	int old_dev;
 	int try;
 	int res = -EBUSY;
@@ -3789,7 +3788,7 @@ static int floppy_open(struct inode * in
 
 	down(&open_lock);
 	old_dev = UDRS->fd_device;
-	if (opened_bdev[drive] && opened_bdev[drive] != inode->i_bdev)
+	if (opened_bdev[drive] && opened_bdev[drive] != bdev)
 		goto out2;
 
 	if (!UDRS->fd_ref && (UDP->flags & FD_BROKEN_DCL)){
@@ -3809,7 +3808,7 @@ static int floppy_open(struct inode * in
 	else
 		UDRS->fd_ref++;
 
-	opened_bdev[drive] = inode->i_bdev;
+	opened_bdev[drive] = bdev;
 
 	res = -ENXIO;
 
@@ -3844,9 +3843,9 @@ static int floppy_open(struct inode * in
 		}
 	}
 
-	UDRS->fd_device = iminor(inode);
-	set_capacity(disks[drive], floppy_sizes[iminor(inode)]);
-	if (old_dev != -1 && old_dev != iminor(inode)) {
+	UDRS->fd_device = MINOR(bdev->bd_dev);
+	set_capacity(disks[drive], floppy_sizes[MINOR(bdev->bd_dev)]);
+	if (old_dev != -1 && old_dev != MINOR(bdev->bd_dev)) {
 		if (buffer_drive == drive)
 			buffer_track = -1;
 	}
@@ -3859,8 +3858,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) == 0)
 	    filp->private_data = (void*) 8;
 
 	if (UFDCS->rawcmd == 1)
@@ -3873,7 +3871,7 @@ static int floppy_open(struct inode * in
 	if (!(filp->f_flags & O_NDELAY)) {
 		if (filp->f_mode & 3) {
 			UDRS->last_checked = 0;
-			check_disk_change(inode->i_bdev);
+			check_disk_change(bdev);
 			if (UTESTF(FD_DISK_CHANGED))
 				goto out;
 		}
diff -puN drivers/block/floppy.c~RD4-open-B6 drivers/block/floppy.c
--- 25/drivers/block/floppy.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/floppy.c	Thu Oct  9 01:44:32 2003
@@ -3708,9 +3708,9 @@ static int floppy_release(struct inode *
  * /dev/PS0 etc), and disallows simultaneous access to the same
  * drive with different device numbers.
  */
-static int floppy_open(struct inode * inode, struct file * filp)
+static int floppy_open(struct block_device *bdev, struct file * filp)
 {
-	int drive = (long)inode->i_bdev->bd_disk->private_data;
+	int drive = (long)bdev->bd_disk->private_data;
 	int old_dev;
 	int try;
 	int res = -EBUSY;
@@ -3719,7 +3719,7 @@ static int floppy_open(struct inode * in
 	filp->private_data = (void*) 0;
 	down(&open_lock);
 	old_dev = UDRS->fd_device;
-	if (opened_bdev[drive] && opened_bdev[drive] != inode->i_bdev)
+	if (opened_bdev[drive] && opened_bdev[drive] != bdev)
 		goto out2;
 
 	if (!UDRS->fd_ref && (UDP->flags & FD_BROKEN_DCL)){
@@ -3739,7 +3739,7 @@ static int floppy_open(struct inode * in
 	else
 		UDRS->fd_ref++;
 
-	opened_bdev[drive] = inode->i_bdev;
+	opened_bdev[drive] = bdev;
 
 	res = -ENXIO;
 
@@ -3774,9 +3774,9 @@ static int floppy_open(struct inode * in
 		}
 	}
 
-	UDRS->fd_device = iminor(inode);
-	set_capacity(disks[drive], floppy_sizes[iminor(inode)]);
-	if (old_dev != -1 && old_dev != iminor(inode)) {
+	UDRS->fd_device = MINOR(bdev->bd_dev);
+	set_capacity(disks[drive], floppy_sizes[MINOR(bdev->bd_dev)]);
+	if (old_dev != -1 && old_dev != MINOR(bdev->bd_dev)) {
 		if (buffer_drive == drive)
 			buffer_track = -1;
 	}
@@ -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)
@@ -3794,7 +3793,7 @@ static int floppy_open(struct inode * in
 	if (!(filp->f_flags & O_NDELAY)) {
 		if (filp->f_mode & 3) {
 			UDRS->last_checked = 0;
-			check_disk_change(inode->i_bdev);
+			check_disk_change(bdev);
 			if (UTESTF(FD_DISK_CHANGED))
 				goto out;
 		}
diff -puN drivers/block/loop.c~RD4-open-B6 drivers/block/loop.c
--- 25/drivers/block/loop.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/loop.c	Thu Oct  9 01:44:32 2003
@@ -1089,9 +1089,9 @@ static int lo_ioctl(struct block_device 
 	return err;
 }
 
-static int lo_open(struct inode *inode, struct file *file)
+static int lo_open(struct block_device *bdev, struct file *file)
 {
-	struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
+	struct loop_device *lo = bdev->bd_disk->private_data;
 
 	down(&lo->lo_ctl_mutex);
 	lo->lo_refcnt++;
diff -puN drivers/block/paride/pcd.c~RD4-open-B6 drivers/block/paride/pcd.c
--- 25/drivers/block/paride/pcd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/paride/pcd.c	Thu Oct  9 01:44:32 2003
@@ -243,10 +243,10 @@ static int pcd_warned;		/* Have we logge
 
 /* kernel glue structures */
 
-static int pcd_block_open(struct inode *inode, struct file *file)
+static int pcd_block_open(struct block_device *bdev, struct file *file)
 {
-	struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data;
-	return cdrom_open(&cd->info, inode->i_bdev, file);
+	struct pcd_unit *cd = bdev->bd_disk->private_data;
+	return cdrom_open(&cd->info, bdev, file);
 }
 
 static int pcd_block_release(struct inode *inode, struct file *file)
diff -puN drivers/block/paride/pd.c~RD4-open-B6 drivers/block/paride/pd.c
--- 25/drivers/block/paride/pd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/paride/pd.c	Thu Oct  9 01:44:32 2003
@@ -236,7 +236,7 @@ MODULE_PARM(drive3, "1-8i");
 #define IDE_EJECT		0xed
 
 void pd_setup(char *str, int *ints);
-static int pd_open(struct inode *inode, struct file *file);
+static int pd_open(struct block_device *bdev, struct file *file);
 static void do_pd_request(request_queue_t * q);
 static int pd_ioctl(struct block_device *bdev, struct file *file,
 		    unsigned int cmd, unsigned long arg);
@@ -304,8 +304,6 @@ static char *pd_errs[17] = { "ERR", "IND
 
 /* kernel glue structures */
 
-extern struct block_device_operations pd_fops;
-
 static struct block_device_operations pd_fops = {
 	.owner		= THIS_MODULE,
 	.open		= pd_open,
@@ -337,9 +335,9 @@ static void pd_init_units(void)
 	}
 }
 
-static int pd_open(struct inode *inode, struct file *file)
+static int pd_open(struct block_device *bdev, struct file *file)
 {
-	struct pd_unit *disk = inode->i_bdev->bd_disk->private_data;
+	struct pd_unit *disk = bdev->bd_disk->private_data;
 
 	disk->access++;
 
diff -puN drivers/block/paride/pf.c~RD4-open-B6 drivers/block/paride/pf.c
--- 25/drivers/block/paride/pf.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/paride/pf.c	Thu Oct  9 01:44:32 2003
@@ -222,7 +222,7 @@ MODULE_PARM(drive3, "1-7i");
 #define ATAPI_READ_10		0x28
 #define ATAPI_WRITE_10		0x2a
 
-static int pf_open(struct inode *inode, struct file *file);
+static int pf_open(struct block_device *bdev, struct file *file);
 static void do_pf_request(request_queue_t * q);
 static int pf_ioctl(struct block_device *bdev, struct file *file,
 		    unsigned int cmd, unsigned long arg);
@@ -315,9 +315,9 @@ void pf_init_units(void)
 	}
 }
 
-static int pf_open(struct inode *inode, struct file *file)
+static int pf_open(struct block_device *bdev, struct file *file)
 {
-	struct pf_unit *pf = inode->i_bdev->bd_disk->private_data;
+	struct pf_unit *pf = bdev->bd_disk->private_data;
 
 	pf_identify(pf);
 
diff -puN drivers/block/rd.c~RD4-open-B6 drivers/block/rd.c
--- 25/drivers/block/rd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/rd.c	Thu Oct  9 01:44:32 2003
@@ -267,16 +267,15 @@ static struct backing_dev_info rd_backin
 	.memory_backed	= 1,	/* Does not contribute to dirty memory */
 };
 
-static int rd_open(struct inode * inode, struct file * filp)
+static int rd_open(struct block_device *bdev, struct file * filp)
 {
-	unsigned unit = iminor(inode);
+	unsigned unit = MINOR(bdev->bd_dev);
 
 	/*
 	 * Immunize device against invalidate_buffers() and prune_icache().
 	 */
 	if (rd_bdev[unit] == NULL) {
-		struct block_device *bdev = inode->i_bdev;
-		inode = igrab(bdev->bd_inode);
+		struct inode *inode = igrab(bdev->bd_inode);
 		rd_bdev[unit] = bdev;
 		bdev->bd_openers++;
 		bdev->bd_block_size = rd_blocksize;
diff -puN drivers/block/swim3.c~RD4-open-B6 drivers/block/swim3.c
--- 25/drivers/block/swim3.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/swim3.c	Thu Oct  9 01:44:32 2003
@@ -241,7 +241,7 @@ static void release_drive(struct floppy_
 static int fd_eject(struct floppy_state *fs);
 static int floppy_ioctl(struct block_device *bdev, struct file *filp,
 			unsigned int cmd, unsigned long param);
-static int floppy_open(struct inode *inode, struct file *filp);
+static int floppy_open(struct block_device *bdev, struct file *filp);
 static int floppy_release(struct inode *inode, struct file *filp);
 static int floppy_check_change(struct gendisk *disk);
 static int floppy_revalidate(struct gendisk *disk);
@@ -838,9 +838,9 @@ static int floppy_ioctl(struct block_dev
 	return -ENOTTY;
 }
 
-static int floppy_open(struct inode *inode, struct file *filp)
+static int floppy_open(struct block_device *bdev, struct file *filp)
 {
-	struct floppy_state *fs = inode->i_bdev->bd_disk->private_data;
+	struct floppy_state *fs = bdev->bd_disk->private_data;
 	volatile struct swim3 *sw = fs->swim3;
 	int n, err = 0;
 
@@ -876,7 +876,7 @@ static int floppy_open(struct inode *ino
 
 	if (err == 0 && (filp->f_flags & O_NDELAY) == 0
 	    && (filp->f_mode & 3)) {
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 		if (fs->ejected)
 			err = -ENXIO;
 	}
diff -puN drivers/block/swim_iop.c~RD4-open-B6 drivers/block/swim_iop.c
--- 25/drivers/block/swim_iop.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/swim_iop.c	Thu Oct  9 01:44:32 2003
@@ -100,7 +100,7 @@ static int swimiop_eject(struct floppy_s
 
 static int floppy_ioctl(struct block_device *bdev, struct file *filp,
 			unsigned int cmd, unsigned long param);
-static int floppy_open(struct inode *inode, struct file *filp);
+static int floppy_open(struct block_device *bdev, struct file *filp);
 static int floppy_release(struct inode *inode, struct file *filp);
 static int floppy_check_change(struct gendisk *disk);
 static int floppy_revalidate(struct gendisk *disk);
@@ -372,15 +372,15 @@ static int floppy_ioctl(struct block_dev
 	return -ENOTTY;
 }
 
-static int floppy_open(struct inode *inode, struct file *filp)
+static int floppy_open(struct block_device *bdev, struct file *filp)
 {
-	struct floppy_state *fs = inode->i_bdev->bd_disk->private_data;
+	struct floppy_state *fs = bdev->bd_disk->private_data;
 
 	if (fs->ref_count == -1 || filp->f_flags & O_EXCL)
 		return -EBUSY;
 
 	if ((filp->f_flags & O_NDELAY) == 0 && (filp->f_mode & 3)) {
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 		if (fs->ejected)
 			return -ENXIO;
 	}
diff -puN drivers/block/umem.c~RD4-open-B6 drivers/block/umem.c
--- 25/drivers/block/umem.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/umem.c	Thu Oct  9 01:44:32 2003
@@ -153,7 +153,6 @@ struct cardinfo {
 };
 
 static struct cardinfo cards[MM_MAXCARDS];
-static struct block_device_operations mm_fops;
 static struct timer_list battery_timer;
 
 static int num_cards = 0;
diff -puN drivers/block/z2ram.c~RD4-open-B6 drivers/block/z2ram.c
--- 25/drivers/block/z2ram.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/block/z2ram.c	Thu Oct  9 01:44:32 2003
@@ -67,7 +67,6 @@ static int current_device   = -1;
 
 static spinlock_t z2ram_lock = SPIN_LOCK_UNLOCKED;
 
-static struct block_device_operations z2_fops;
 static struct gendisk *z2ram_gendisk;
 
 static void do_z2_request(request_queue_t *q)
@@ -141,7 +140,7 @@ get_chipram( void )
 }
 
 static int
-z2_open( struct inode *inode, struct file *filp )
+z2_open( struct block_device *bdev, struct file *filp )
 {
     int device;
     int max_z2_map = ( Z2RAM_SIZE / Z2RAM_CHUNKSIZE ) *
@@ -150,7 +149,7 @@ z2_open( struct inode *inode, struct fil
 	sizeof( z2ram_map[0] );
     int rc = -ENOMEM;
 
-    device = iminor(inode);
+    device = MINOR(bdev->bd_dev);
 
     if ( current_device != -1 && current_device != device )
     {
diff -puN drivers/cdrom/aztcd.c~RD4-open-B6 drivers/cdrom/aztcd.c
--- 25/drivers/cdrom/aztcd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/aztcd.c	Thu Oct  9 01:44:32 2003
@@ -332,7 +332,7 @@ static int aztGetToc(int multi);
 static int check_aztcd_media_change(struct gendisk *disk);
 static int aztcd_ioctl(struct block_device *bdev, struct file *fp, unsigned int cmd,
 		       unsigned long arg);
-static int aztcd_open(struct inode *ip, struct file *fp);
+static int aztcd_open(struct block_device *bdev, struct file *fp);
 static int aztcd_release(struct inode *inode, struct file *file);
 
 static struct block_device_operations azt_fops = {
@@ -1622,7 +1622,7 @@ static void azt_invalidate_buffers(void)
 /*
  * Open the device special file.  Check that a disk is in.
  */
-static int aztcd_open(struct inode *ip, struct file *fp)
+static int aztcd_open(struct block_device *bdev, struct file *fp)
 {
 	int st;
 
diff -puN drivers/cdrom/cdu31a.c~RD4-open-B6 drivers/cdrom/cdu31a.c
--- 25/drivers/cdrom/cdu31a.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/cdu31a.c	Thu Oct  9 01:44:32 2003
@@ -3167,9 +3167,9 @@ static struct cdrom_device_info scd_info
 	.name		= "cdu31a"
 };
 
-static int scd_block_open(struct inode *inode, struct file *file)
+static int scd_block_open(struct block_device *bdev, struct file *file)
 {
-	return cdrom_open(&scd_info, inode->i_bdev, file);
+	return cdrom_open(&scd_info, bdev, file);
 }
 
 static int scd_block_release(struct inode *inode, struct file *file)
diff -puN drivers/cdrom/cm206.c~RD4-open-B6 drivers/cdrom/cm206.c
--- 25/drivers/cdrom/cm206.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/cm206.c	Thu Oct  9 01:44:32 2003
@@ -1350,9 +1350,9 @@ static struct cdrom_device_info cm206_in
 	.name		= "cm206",
 };
 
-static int cm206_block_open(struct inode *inode, struct file *file)
+static int cm206_block_open(struct block_device *bdev, struct file *file)
 {
-	return cdrom_open(&cm206_info, inode->i_bdev, file);
+	return cdrom_open(&cm206_info, bdev, file);
 }
 
 static int cm206_block_release(struct inode *inode, struct file *file)
diff -puN drivers/cdrom/gscd.c~RD4-open-B6 drivers/cdrom/gscd.c
--- 25/drivers/cdrom/gscd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/gscd.c	Thu Oct  9 01:44:32 2003
@@ -93,7 +93,7 @@ static void gscd_bin2bcd(unsigned char *
 static void __do_gscd_request(unsigned long dummy);
 static int gscd_ioctl(struct block_device *, struct file *, unsigned int,
 		      unsigned long);
-static int gscd_open(struct inode *, struct file *);
+static int gscd_open(struct block_device *, struct file *);
 static int gscd_release(struct inode *, struct file *);
 static int check_gscd_med_chg(struct gendisk *disk);
 
@@ -338,7 +338,7 @@ static void gscd_read_cmd(struct request
  * Open the device special file.  Check that a disk is in.
  */
 
-static int gscd_open(struct inode *ip, struct file *fp)
+static int gscd_open(struct block_device *bdev, struct file *fp)
 {
 	int st;
 
diff -puN drivers/cdrom/mcd.c~RD4-open-B6 drivers/cdrom/mcd.c
--- 25/drivers/cdrom/mcd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/mcd.c	Thu Oct  9 01:44:32 2003
@@ -214,9 +214,9 @@ static struct cdrom_device_info mcd_info
 	.name		= "mcd",
 };
 
-static int mcd_block_open(struct inode *inode, struct file *file)
+static int mcd_block_open(struct block_device *bdev, struct file *file)
 {
-	return cdrom_open(&mcd_info, inode->i_bdev, file);
+	return cdrom_open(&mcd_info, bdev, file);
 }
 
 static int mcd_block_release(struct inode *inode, struct file *file)
diff -puN drivers/cdrom/mcdx.c~RD4-open-B6 drivers/cdrom/mcdx.c
--- 25/drivers/cdrom/mcdx.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/mcdx.c	Thu Oct  9 01:44:32 2003
@@ -221,10 +221,10 @@ struct s_drive_stuff {
 int mcdx_init(void);
 void do_mcdx_request(request_queue_t * q);
 
-static int mcdx_block_open(struct inode *inode, struct file *file)
+static int mcdx_block_open(struct block_device *bdev, struct file *file)
 {
-	struct s_drive_stuff *p = inode->i_bdev->bd_disk->private_data;
-	return cdrom_open(&p->info, inode->i_bdev, file);
+	struct s_drive_stuff *p = bdev->bd_disk->private_data;
+	return cdrom_open(&p->info, bdev, file);
 }
 
 static int mcdx_block_release(struct inode *inode, struct file *file)
diff -puN drivers/cdrom/optcd.c~RD4-open-B6 drivers/cdrom/optcd.c
--- 25/drivers/cdrom/optcd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/optcd.c	Thu Oct  9 01:44:32 2003
@@ -1841,7 +1841,7 @@ static int opt_ioctl(struct block_device
 static int open_count = 0;
 
 /* Open device special file; check that a disk is in. */
-static int opt_open(struct inode *ip, struct file *fp)
+static int opt_open(struct block_device *bdev, struct file *fp)
 {
 	DEBUG((DEBUG_VFS, "starting opt_open"));
 
diff -puN drivers/cdrom/sbpcd.c~RD4-open-B6 drivers/cdrom/sbpcd.c
--- 25/drivers/cdrom/sbpcd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/sbpcd.c	Thu Oct  9 01:44:32 2003
@@ -5356,10 +5356,10 @@ static int sbp_data(struct request *req)
 }
 /*==========================================================================*/
 
-static int sbpcd_block_open(struct inode *inode, struct file *file)
+static int sbpcd_block_open(struct block_device *bdev, struct file *file)
 {
-	struct sbpcd_drive *p = inode->i_bdev->bd_disk->private_data;
-	return cdrom_open(p->sbpcd_infop, inode->i_bdev, file);
+	struct sbpcd_drive *p = bdev->bd_disk->private_data;
+	return cdrom_open(p->sbpcd_infop, bdev, file);
 }
 
 static int sbpcd_block_release(struct inode *inode, struct file *file)
diff -puN drivers/cdrom/sjcd.c~RD4-open-B6 drivers/cdrom/sjcd.c
--- 25/drivers/cdrom/sjcd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/sjcd.c	Thu Oct  9 01:44:32 2003
@@ -1519,7 +1519,7 @@ static void do_sjcd_request(request_queu
 /*
  * Open the device special file. Check disk is in.
  */
-static int sjcd_open(struct inode *ip, struct file *fp)
+static int sjcd_open(struct block_device *bdev, struct file *fp)
 {
 	/*
 	 * Check the presence of device.
diff -puN drivers/cdrom/sonycd535.c~RD4-open-B6 drivers/cdrom/sonycd535.c
--- 25/drivers/cdrom/sonycd535.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/cdrom/sonycd535.c	Thu Oct  9 01:44:32 2003
@@ -201,7 +201,7 @@
 
 static int read_subcode(void);
 static void sony_get_toc(void);
-static int cdu_open(struct inode *inode, struct file *filp);
+static int cdu_open(struct block_device *bdev, struct file *filp);
 static inline unsigned int int_to_bcd(unsigned int val);
 static unsigned int bcd_to_int(unsigned int bcd);
 static int do_sony_cmd(Byte * cmd, int nCmd, Byte status[2],
@@ -1360,9 +1360,7 @@ cdu_ioctl(struct block_device *bdev,
  * Open the drive for operations.  Spin the drive up and read the table of
  * contents if these have not already been done.
  */
-static int
-cdu_open(struct inode *inode,
-		 struct file *filp)
+static int cdu_open(struct block_device *bdev, struct file *filp)
 {
 	Byte status[2], cmd_buff[2];
 
@@ -1385,7 +1383,7 @@ cdu_open(struct inode *inode,
 		sony_inuse = 0;
 		return -EIO;
 	}
-	check_disk_change(inode->i_bdev);
+	check_disk_change(bdev);
 	sony_usage++;
 
 #ifdef LOCK_DOORS
diff -puN drivers/ide/ide.c~RD4-open-B6 drivers/ide/ide.c
--- 25/drivers/ide/ide.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/ide/ide.c	Thu Oct  9 01:44:32 2003
@@ -458,7 +458,7 @@ void ide_probe_module (void)
 
 EXPORT_SYMBOL(ide_probe_module);
 
-static int ide_open (struct inode * inode, struct file * filp)
+static int ide_open (struct block_device *bdev, struct file * filp)
 {
 	return -ENXIO;
 }
diff -puN drivers/ide/ide-cd.c~RD4-open-B6 drivers/ide/ide-cd.c
--- 25/drivers/ide/ide-cd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/ide/ide-cd.c	Thu Oct  9 01:44:32 2003
@@ -3331,16 +3331,16 @@ static ide_driver_t ide_cdrom_driver = {
 	.complete_power_step	= ide_cdrom_complete_power_step,
 };
 
-static int idecd_open(struct inode * inode, struct file * file)
+static int idecd_open(struct block_device *bdev, struct file * file)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = bdev->bd_disk->private_data;
 	struct cdrom_info *info = drive->driver_data;
 	int rc = -ENOMEM;
 	drive->usage++;
 
 	if (!info->buffer)
 		info->buffer = (char *) kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL);
-        if (!info->buffer || (rc = cdrom_open(&info->devinfo, inode->i_bdev, file)))
+        if (!info->buffer || (rc = cdrom_open(&info->devinfo, bdev, file)))
 		drive->usage--;
 	return rc;
 }
diff -puN drivers/ide/ide-disk.c~RD4-open-B6 drivers/ide/ide-disk.c
--- 25/drivers/ide/ide-disk.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/ide/ide-disk.c	Thu Oct  9 01:44:32 2003
@@ -1734,9 +1734,9 @@ static ide_driver_t idedisk_driver = {
 	.complete_power_step	= idedisk_complete_power_step,
 };
 
-static int idedisk_open(struct inode *inode, struct file *filp)
+static int idedisk_open(struct block_device *bdev, struct file *filp)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = bdev->bd_disk->private_data;
 	drive->usage++;
 	if (drive->removable && drive->usage == 1) {
 		ide_task_t args;
@@ -1744,7 +1744,7 @@ static int idedisk_open(struct inode *in
 		memset(&args, 0, sizeof(ide_task_t));
 		args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORLOCK;
 		args.command_type = ide_cmd_type_parser(&args);
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 		/*
 		 * Ignore the return code from door_lock,
 		 * since the open() has already succeeded,
diff -puN drivers/ide/ide-floppy.c~RD4-open-B6 drivers/ide/ide-floppy.c
--- 25/drivers/ide/ide-floppy.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/ide/ide-floppy.c	Thu Oct  9 01:44:32 2003
@@ -1866,9 +1866,9 @@ static ide_driver_t idefloppy_driver = {
 	.drives			= LIST_HEAD_INIT(idefloppy_driver.drives),
 };
 
-static int idefloppy_open(struct inode *inode, struct file *filp)
+static int idefloppy_open(struct block_device *bdev, struct file *filp)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = bdev->bd_disk->private_data;
 	idefloppy_floppy_t *floppy = drive->driver_data;
 	idefloppy_pc_t pc;
 
@@ -1908,7 +1908,7 @@ static int idefloppy_open(struct inode *
 			idefloppy_create_prevent_cmd(&pc, 1);
 			(void) idefloppy_queue_pc_tail(drive, &pc);
 		}
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 	} else if (test_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags)) {
 		drive->usage--;
 		return -EBUSY;
diff -puN drivers/ide/ide-tape.c~RD4-open-B6 drivers/ide/ide-tape.c
--- 25/drivers/ide/ide-tape.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/ide/ide-tape.c	Thu Oct  9 01:44:32 2003
@@ -6338,9 +6338,9 @@ static struct file_operations idetape_fo
 	.release	= idetape_chrdev_release,
 };
 
-static int idetape_open(struct inode *inode, struct file *filp)
+static int idetape_open(struct block_device *bdev, struct file *filp)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = bdev->bd_disk->private_data;
 	drive->usage++;
 	return 0;
 }
diff -puN drivers/md/dm.c~RD4-open-B6 drivers/md/dm.c
--- 25/drivers/md/dm.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/md/dm.c	Thu Oct  9 01:44:32 2003
@@ -160,11 +160,9 @@ static void __exit dm_exit(void)
 /*
  * Block device functions
  */
-static int dm_blk_open(struct inode *inode, struct file *file)
+static int dm_blk_open(struct block_device *bdev, struct file *file)
 {
-	struct mapped_device *md;
-
-	md = inode->i_bdev->bd_disk->private_data;
+	struct mapped_device *md = bdev->bd_disk->private_data;
 	dm_get(md);
 	return 0;
 }
diff -puN drivers/md/md.c~RD4-open-B6 drivers/md/md.c
--- 25/drivers/md/md.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/md/md.c	Thu Oct  9 01:44:32 2003
@@ -2599,12 +2599,12 @@ abort:
 	return err;
 }
 
-static int md_open(struct inode *inode, struct file *file)
+static int md_open(struct block_device *bdev, struct file *file)
 {
 	/*
 	 * Succeed if we can find or allocate a mddev structure.
 	 */
-	mddev_t *mddev = mddev_find(iminor(inode));
+	mddev_t *mddev = mddev_find(MINOR(bdev->bd_dev));
 	int err = -ENOMEM;
 
 	if (!mddev)
@@ -2615,7 +2615,7 @@ static int md_open(struct inode *inode, 
 
 	err = 0;
 	mddev_unlock(mddev);
-	inode->i_bdev->bd_inode->u.generic_ip = mddev_get(mddev);
+	bdev->bd_inode->u.generic_ip = mddev_get(mddev);
  put:
 	mddev_put(mddev);
  out:
diff -puN drivers/message/i2o/i2o_block.c~RD4-open-B6 drivers/message/i2o/i2o_block.c
--- 25/drivers/message/i2o/i2o_block.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/message/i2o/i2o_block.c	Thu Oct  9 01:44:32 2003
@@ -999,9 +999,9 @@ static int i2ob_release(struct inode *in
  *	Open the block device.
  */
  
-static int i2ob_open(struct inode *inode, struct file *file)
+static int i2ob_open(struct block_device *bdev, struct file *file)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	struct i2ob_device *dev = disk->private_data;
 
 	if(!dev->i2odev)	
diff -puN drivers/mtd/mtd_blkdevs.c~RD4-open-B6 drivers/mtd/mtd_blkdevs.c
--- 25/drivers/mtd/mtd_blkdevs.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/mtd/mtd_blkdevs.c	Thu Oct  9 01:44:32 2003
@@ -141,14 +141,12 @@ static void mtd_blktrans_request(struct 
 }
 
 
-int blktrans_open(struct inode *i, struct file *f)
+static int blktrans_open(struct block_device *bdev, struct file *f)
 {
-	struct mtd_blktrans_dev *dev;
-	struct mtd_blktrans_ops *tr;
+	struct mtd_blktrans_dev *dev = bdev->bd_disk->private_data;
+	struct mtd_blktrans_ops *tr = dev->tr;
 	int ret = -ENODEV;
 
-	dev = i->i_bdev->bd_disk->private_data;
-	tr = dev->tr;
 
 	if (!try_module_get(dev->mtd->owner))
 		goto out;
diff -puN drivers/s390/block/dasd.c~RD4-open-B6 drivers/s390/block/dasd.c
--- 25/drivers/s390/block/dasd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/s390/block/dasd.c	Thu Oct  9 01:44:32 2003
@@ -1643,9 +1643,9 @@ dasd_flush_request_queue(struct dasd_dev
 }
 
 static int
-dasd_open(struct inode *inp, struct file *filp)
+dasd_open(struct block_device *bdev, struct file *filp)
 {
-	struct gendisk *disk = inp->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	struct dasd_device *device = disk->private_data;
 	int rc;
 
diff -puN drivers/s390/char/tape_block.c~RD4-open-B6 drivers/s390/char/tape_block.c
--- 25/drivers/s390/char/tape_block.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/s390/char/tape_block.c	Thu Oct  9 01:44:32 2003
@@ -27,7 +27,7 @@
 /*
  * file operation structure for tape block frontend
  */
-static int tapeblock_open(struct inode *, struct file *);
+static int tapeblock_open(block_device *, struct file *);
 static int tapeblock_release(struct inode *, struct file *);
 
 static struct block_device_operations tapeblock_fops = {
@@ -299,9 +299,9 @@ static int tapeblock_mediumdetect(struct
  * Block frontend tape device open function.
  */
 static int
-tapeblock_open(struct inode *inode, struct file *filp)
+tapeblock_open(struct block_device *bdev, struct file *filp)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	struct tape_device *device = disk->private_data;
 	int rc;
 
diff -puN drivers/scsi/ide-scsi.c~RD4-open-B6 drivers/scsi/ide-scsi.c
--- 25/drivers/scsi/ide-scsi.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/scsi/ide-scsi.c	Thu Oct  9 01:44:32 2003
@@ -635,9 +635,9 @@ static ide_driver_t idescsi_driver = {
 	.drives			= LIST_HEAD_INIT(idescsi_driver.drives),
 };
 
-static int idescsi_ide_open(struct inode *inode, struct file *filp)
+static int idescsi_ide_open(struct block_device *bdev, struct file *filp)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = bdev->bd_disk->private_data;
 	drive->usage++;
 	return 0;
 }
diff -puN drivers/scsi/sd.c~RD4-open-B6 drivers/scsi/sd.c
--- 25/drivers/scsi/sd.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/scsi/sd.c	Thu Oct  9 01:44:32 2003
@@ -348,9 +348,9 @@ queue:
  *	In the latter case @inode and @filp carry an abridged amount
  *	of information as noted above.
  **/
-static int sd_open(struct inode *inode, struct file *filp)
+static int sd_open(struct block_device *bdev, struct file *filp)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
+	struct gendisk *disk = bdev->bd_disk;
 	struct scsi_disk *sdkp = scsi_disk(disk);
 	struct scsi_device *sdev = sdkp->device;
 	int retval;
@@ -370,7 +370,7 @@ static int sd_open(struct inode *inode, 
 		goto error_out;
 
 	if (sdev->removable || sdkp->write_prot)
-		check_disk_change(inode->i_bdev);
+		check_disk_change(bdev);
 
 	/*
 	 * If the drive is empty, just let the open fail.
diff -puN drivers/scsi/sr.c~RD4-open-B6 drivers/scsi/sr.c
--- 25/drivers/scsi/sr.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/drivers/scsi/sr.c	Thu Oct  9 01:44:32 2003
@@ -413,10 +413,10 @@ queue:
 	return 1;
 }
 
-static int sr_block_open(struct inode *inode, struct file *file)
+static int sr_block_open(struct block_device *bdev, struct file *file)
 {
-	struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk);
-	return cdrom_open(&cd->cdi, inode->i_bdev, file);
+	struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
+	return cdrom_open(&cd->cdi, bdev, file);
 }
 
 static int sr_block_release(struct inode *inode, struct file *file)
diff -puN fs/block_dev.c~RD4-open-B6 fs/block_dev.c
--- 25/fs/block_dev.c~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/fs/block_dev.c	Thu Oct  9 01:44:32 2003
@@ -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, 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, 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;
 
diff -puN include/linux/fs.h~RD4-open-B6 include/linux/fs.h
--- 25/include/linux/fs.h~RD4-open-B6	Thu Oct  9 01:44:32 2003
+++ 25-akpm/include/linux/fs.h	Thu Oct  9 01:44:32 2003
@@ -758,7 +758,7 @@ extern int vfs_rename(struct inode *, st
 typedef int (*filldir_t)(void *, const char *, int, loff_t, ino_t, unsigned);
 
 struct block_device_operations {
-	int (*open) (struct inode *, struct file *);
+	int (*open) (struct block_device *, struct file *);
 	int (*release) (struct inode *, struct file *);
 	int (*ioctl) (struct block_device *, struct file *, unsigned, unsigned long);
 	int (*media_changed) (struct gendisk *);

_