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

diff -puN arch/um/drivers/ubd_kern.c~RD6-release-B6 arch/um/drivers/ubd_kern.c
--- 25/arch/um/drivers/ubd_kern.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/arch/um/drivers/ubd_kern.c	2003-11-04 22:00:44.000000000 -0800
@@ -50,7 +50,7 @@ static spinlock_t ubd_lock = SPIN_LOCK_U
 static void (*do_ubd)(void);
 
 static int ubd_open(struct block_device *bdev, struct file * filp);
-static int ubd_release(struct inode * inode, struct file * file);
+static int ubd_release(struct gendisk *disk);
 static int ubd_ioctl(struct block_device *bdev, struct file * file,
 		     unsigned int cmd, unsigned long arg);
 
@@ -739,9 +739,8 @@ static int ubd_open(struct block_device 
 	return(err);
 }
 
-static int ubd_release(struct inode * inode, struct file * file)
+static int ubd_release(struct gendisk *disk)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
 	struct ubd *dev = disk->private_data;
 
 	if(--dev->count == 0)
diff -puN drivers/acorn/block/fd1772.c~RD6-release-B6 drivers/acorn/block/fd1772.c
--- 25/drivers/acorn/block/fd1772.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/acorn/block/fd1772.c	2003-11-04 22:00:44.000000000 -0800
@@ -371,7 +371,6 @@ static void fd_probe(int drive);
 static int fd_test_drive_present(int drive);
 static void config_types(void);
 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 *);
 
 /************************* End of Prototypes **************************/
@@ -1489,9 +1488,10 @@ static int floppy_open(struct block_devi
 	return 0;
 }
 
-static int floppy_release(struct inode *inode, struct file *filp)
+static int floppy_release(struct gendisk *disk)
 {
-	int drive = iminor(inode) & 3;
+	struct archy_floppy_struct *p = disk->private_data;
+	int drive = p - unit;
 
 	if (fd_ref[drive] < 0)
 		fd_ref[drive] = 0;
diff -puN drivers/block/acsi.c~RD6-release-B6 drivers/block/acsi.c
--- 25/drivers/block/acsi.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/acsi.c	2003-11-04 22:00:44.000000000 -0800
@@ -362,7 +362,6 @@ 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 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);
 static int acsi_mode_sense( int target, int lun, SENSE_DATA *sd );
@@ -1161,9 +1160,8 @@ static int acsi_open(struct block_device
  * be forgotten about...
  */
 
-static int acsi_release( struct inode * inode, struct file * file )
+static int acsi_release(struct gendisk *disk)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
 	struct acsi_info_struct *aip = disk->private_data;
 	if (--aip->access_count == 0 && aip->removable)
 		acsi_prevent_removal(aip, 0);
diff -puN drivers/block/amiflop.c~RD6-release-B6 drivers/block/amiflop.c
--- 25/drivers/block/amiflop.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/amiflop.c	2003-11-04 22:00:44.000000000 -0800
@@ -1609,9 +1609,10 @@ static int floppy_open(struct block_devi
 	return 0;
 }
 
-static int floppy_release(struct inode * inode, struct file * filp)
+static int floppy_release(struct gendisk *disk)
 {
-	int drive = iminor(inode) & 3;
+	struct amiga_floppy_struct *p = disk->private_data;
+	int drive = p - unit;
 
 	if (unit[drive].dirty == 1) {
 		del_timer (flush_track_timer + drive);
diff -puN drivers/block/ataflop.c~RD6-release-B6 drivers/block/ataflop.c
--- 25/drivers/block/ataflop.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/ataflop.c	2003-11-04 22:00:44.000000000 -0800
@@ -370,7 +370,6 @@ static void fd_probe( int drive );
 static int fd_test_drive_present( int drive );
 static void config_types( void );
 static int floppy_open(struct block_device *bdev, struct file *filp );
-static int floppy_release( struct inode * inode, struct file * filp );
 
 /************************* End of Prototypes **************************/
 
@@ -1854,9 +1853,9 @@ static int floppy_open(struct block_devi
 }
 
 
-static int floppy_release( struct inode * inode, struct file * filp )
+static int floppy_release(struct gendisk *disk)
 {
-	struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data;
+	struct atari_floppy_struct *p = disk->private_data;
 	if (p->ref < 0)
 		p->ref = 0;
 	else if (!p->ref--) {
diff -puN drivers/block/cciss.c~RD6-release-B6 drivers/block/cciss.c
--- 25/drivers/block/cciss.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/cciss.c	2003-11-04 22:00:44.000000000 -0800
@@ -113,7 +113,7 @@ static ctlr_info_t *hba[MAX_CTLR];
 
 static void do_cciss_request(request_queue_t *q);
 static int cciss_open(struct block_device *bdev, struct file *filep);
-static int cciss_release(struct inode *inode, struct file *filep);
+static int cciss_release(struct gendisk *disk);
 static int cciss_ioctl(struct block_device *bdev, struct file *filep,
 		unsigned int cmd, unsigned long arg);
 
@@ -390,13 +390,13 @@ static int cciss_open(struct block_devic
 /*
  * Close.  Sync first.
  */
-static int cciss_release(struct inode *inode, struct file *filep)
+static int cciss_release(struct gendisk *disk)
 {
-	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(disk);
+	drive_info_struct *drv = get_drv(disk);
 
 #ifdef CCISS_DEBUG
-	printk(KERN_DEBUG "cciss_release %s\n", inode->i_bdev->bd_disk->disk_name);
+	printk(KERN_DEBUG "cciss_release %s\n", disk->disk_name);
 #endif /* CCISS_DEBUG */
 
 	drv->usage_count--;
diff -puN drivers/block/cpqarray.c~RD6-release-B6 drivers/block/cpqarray.c
--- 25/drivers/block/cpqarray.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/cpqarray.c	2003-11-04 22:00:44.000000000 -0800
@@ -129,7 +129,7 @@ static int sendcmd(
 	unsigned int log_unit );
 
 static int ida_open(struct block_device *bdev, struct file *filep);
-static int ida_release(struct inode *inode, struct file *filep);
+static int ida_release(struct gendisk *disk);
 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);
 
@@ -740,9 +740,9 @@ static int ida_open(struct block_device 
 /*
  * Close.  Sync first.
  */
-static int ida_release(struct inode *inode, struct file *filep)
+static int ida_release(struct gendisk *disk)
 {
-	ctlr_info_t *host = get_host(inode->i_bdev->bd_disk);
+	ctlr_info_t *host = get_host(disk);
 	host->usage_count--;
 	return 0;
 }
diff -puN drivers/block/floppy98.c~RD6-release-B6 drivers/block/floppy98.c
--- 25/drivers/block/floppy98.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/floppy98.c	2003-11-04 22:00:44.000000000 -0800
@@ -3735,9 +3735,9 @@ static void __init config_types(void)
 		printk("\n");
 }
 
-static int floppy_release(struct inode * inode, struct file * filp)
+static int floppy_release(struct gendisk *disk)
 {
-	int drive = (long)inode->i_bdev->bd_disk->private_data;
+	int drive = (long)disk->private_data;
 
 	down(&open_lock);
 	if (UDRS->fd_ref < 0)
diff -puN drivers/block/floppy.c~RD6-release-B6 drivers/block/floppy.c
--- 25/drivers/block/floppy.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/floppy.c	2003-11-04 22:00:44.000000000 -0800
@@ -3685,9 +3685,9 @@ static void __init config_types(void)
 		printk("\n");
 }
 
-static int floppy_release(struct inode * inode, struct file * filp)
+static int floppy_release(struct gendisk *disk)
 {
-	int drive = (long)inode->i_bdev->bd_disk->private_data;
+	int drive = (long)disk->private_data;
 
 	down(&open_lock);
 	if (UDRS->fd_ref < 0)
diff -puN drivers/block/loop.c~RD6-release-B6 drivers/block/loop.c
--- 25/drivers/block/loop.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/loop.c	2003-11-04 22:00:44.000000000 -0800
@@ -1100,9 +1100,9 @@ static int lo_open(struct block_device *
 	return 0;
 }
 
-static int lo_release(struct inode *inode, struct file *file)
+static int lo_release(struct gendisk *disk)
 {
-	struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
+	struct loop_device *lo = disk->private_data;
 
 	down(&lo->lo_ctl_mutex);
 	--lo->lo_refcnt;
diff -puN drivers/block/paride/pcd.c~RD6-release-B6 drivers/block/paride/pcd.c
--- 25/drivers/block/paride/pcd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/paride/pcd.c	2003-11-04 22:00:44.000000000 -0800
@@ -249,9 +249,9 @@ static int pcd_block_open(struct block_d
 	return cdrom_open(&cd->info, bdev, file);
 }
 
-static int pcd_block_release(struct inode *inode, struct file *file)
+static int pcd_block_release(struct gendisk *disk)
 {
-	struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data;
+	struct pcd_unit *cd = disk->private_data;
 	return cdrom_release(&cd->info);
 }
 
diff -puN drivers/block/paride/pd.c~RD6-release-B6 drivers/block/paride/pd.c
--- 25/drivers/block/paride/pd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/paride/pd.c	2003-11-04 22:00:44.000000000 -0800
@@ -240,7 +240,7 @@ static int pd_open(struct block_device *
 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);
-static int pd_release(struct inode *inode, struct file *file);
+static int pd_release(struct gendisk *disk);
 static int pd_revalidate(struct gendisk *p);
 static int pd_detect(void);
 static void do_pd_read(void);
@@ -379,9 +379,9 @@ static int pd_ioctl(struct block_device 
 	}
 }
 
-static int pd_release(struct inode *inode, struct file *file)
+static int pd_release(struct gendisk *p)
 {
-	struct pd_unit *disk = inode->i_bdev->bd_disk->private_data;
+	struct pd_unit *disk = p->private_data;
 
 	if (!--disk->access && disk->removable)
 		pd_doorlock(disk, IDE_DOORUNLOCK);
diff -puN drivers/block/paride/pf.c~RD6-release-B6 drivers/block/paride/pf.c
--- 25/drivers/block/paride/pf.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/paride/pf.c	2003-11-04 22:00:44.000000000 -0800
@@ -227,7 +227,7 @@ static void do_pf_request(request_queue_
 static int pf_ioctl(struct block_device *bdev, struct file *file,
 		    unsigned int cmd, unsigned long arg);
 
-static int pf_release(struct inode *inode, struct file *file);
+static int pf_release(struct gendisk *disk);
 
 static int pf_detect(void);
 static void do_pf_read(void);
@@ -365,9 +365,9 @@ static int pf_ioctl(struct block_device 
 	return 0;
 }
 
-static int pf_release(struct inode *inode, struct file *file)
+static int pf_release(struct gendisk *disk)
 {
-	struct pf_unit *pf = inode->i_bdev->bd_disk->private_data;
+	struct pf_unit *pf = disk->private_data;
 
 	if (pf->access <= 0)
 		return -EINVAL;
diff -puN drivers/block/swim3.c~RD6-release-B6 drivers/block/swim3.c
--- 25/drivers/block/swim3.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/swim3.c	2003-11-04 22:00:44.000000000 -0800
@@ -242,7 +242,6 @@ static int fd_eject(struct floppy_state 
 static int floppy_ioctl(struct block_device *bdev, struct file *filp,
 			unsigned int cmd, unsigned long param);
 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);
 static int swim3_add_device(struct device_node *swims);
@@ -904,9 +903,9 @@ static int floppy_open(struct block_devi
 	return 0;
 }
 
-static int floppy_release(struct inode *inode, struct file *filp)
+static int floppy_release(struct gendisk *disk)
 {
-	struct floppy_state *fs = inode->i_bdev->bd_disk->private_data;
+	struct floppy_state *fs = disk->private_data;
 	volatile struct swim3 *sw = fs->swim3;
 	if (fs->ref_count > 0 && --fs->ref_count == 0) {
 		swim3_action(fs, MOTOR_OFF);
diff -puN drivers/block/swim_iop.c~RD6-release-B6 drivers/block/swim_iop.c
--- 25/drivers/block/swim_iop.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/swim_iop.c	2003-11-04 22:00:44.000000000 -0800
@@ -101,7 +101,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 block_device *bdev, struct file *filp);
-static int floppy_release(struct inode *inode, struct file *filp);
+static int floppy_release(struct gendisk *disk);
 static int floppy_check_change(struct gendisk *disk);
 static int floppy_revalidate(struct gendisk *disk);
 static int grab_drive(struct floppy_state *fs, enum swim_state state,
@@ -396,9 +396,9 @@ static int floppy_open(struct block_devi
 	return 0;
 }
 
-static int floppy_release(struct inode *inode, struct file *filp)
+static int floppy_release(struct gendisk *disk)
 {
-	struct floppy_state *fs = inode->i_bdev->bd_disk->private_data;
+	struct floppy_state *fs = disk->private_data;
 	if (fs->ref_count > 0)
 		fs->ref_count--;
 	return 0;
diff -puN drivers/block/z2ram.c~RD6-release-B6 drivers/block/z2ram.c
--- 25/drivers/block/z2ram.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/block/z2ram.c	2003-11-04 22:00:44.000000000 -0800
@@ -300,8 +300,7 @@ err_out:
     return rc;
 }
 
-static int
-z2_release( struct inode *inode, struct file *filp )
+static int z2_release(struct gendisk *disk)
 {
     if ( current_device == -1 )
 	return 0;     
diff -puN drivers/cdrom/aztcd.c~RD6-release-B6 drivers/cdrom/aztcd.c
--- 25/drivers/cdrom/aztcd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/aztcd.c	2003-11-04 22:00:44.000000000 -0800
@@ -333,7 +333,7 @@ static int check_aztcd_media_change(stru
 static int aztcd_ioctl(struct block_device *bdev, struct file *fp, unsigned int cmd,
 		       unsigned long arg);
 static int aztcd_open(struct block_device *bdev, struct file *fp);
-static int aztcd_release(struct inode *inode, struct file *file);
+static int aztcd_release(struct gendisk *disk);
 
 static struct block_device_operations azt_fops = {
 	.owner		= THIS_MODULE,
@@ -1671,12 +1671,11 @@ static int aztcd_open(struct block_devic
 /*
  * On close, we flush all azt blocks from the buffer cache.
  */
-static int aztcd_release(struct inode *inode, struct file *file)
+static int aztcd_release(struct gendisk *disk)
 {
 #ifdef AZT_DEBUG
 	printk("aztcd: executing aztcd_release\n");
-	printk("inode: %p, device: %s    file: %p\n", inode,
-	       inode->i_bdev->bd_disk->disk_name, file);
+	printk("disk: %p, device: %s\n", disk, disk->disk_name);
 #endif
 	if (!--azt_open_count) {
 		azt_invalidate_buffers();
diff -puN drivers/cdrom/cdu31a.c~RD6-release-B6 drivers/cdrom/cdu31a.c
--- 25/drivers/cdrom/cdu31a.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/cdu31a.c	2003-11-04 22:00:44.000000000 -0800
@@ -3172,7 +3172,7 @@ static int scd_block_open(struct block_d
 	return cdrom_open(&scd_info, bdev, file);
 }
 
-static int scd_block_release(struct inode *inode, struct file *file)
+static int scd_block_release(struct gendisk *disk)
 {
 	return cdrom_release(&scd_info);
 }
diff -puN drivers/cdrom/cm206.c~RD6-release-B6 drivers/cdrom/cm206.c
--- 25/drivers/cdrom/cm206.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/cm206.c	2003-11-04 22:00:44.000000000 -0800
@@ -1355,7 +1355,7 @@ static int cm206_block_open(struct block
 	return cdrom_open(&cm206_info, bdev, file);
 }
 
-static int cm206_block_release(struct inode *inode, struct file *file)
+static int cm206_block_release(struct gendisk *disk)
 {
 	return cdrom_release(&cm206_info);
 }
diff -puN drivers/cdrom/gscd.c~RD6-release-B6 drivers/cdrom/gscd.c
--- 25/drivers/cdrom/gscd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/gscd.c	2003-11-04 22:00:44.000000000 -0800
@@ -94,7 +94,7 @@ static void __do_gscd_request(unsigned l
 static int gscd_ioctl(struct block_device *, struct file *, unsigned int,
 		      unsigned long);
 static int gscd_open(struct block_device *, struct file *);
-static int gscd_release(struct inode *, struct file *);
+static int gscd_release(struct gendisk *disk);
 static int check_gscd_med_chg(struct gendisk *disk);
 
 /*      GoldStar Funktionen    */
@@ -368,7 +368,7 @@ static int gscd_open(struct block_device
  * On close, we flush all gscd blocks from the buffer cache.
  */
 
-static int gscd_release(struct inode *inode, struct file *file)
+static int gscd_release(struct gendisk *disk)
 {
 
 #ifdef GSCD_DEBUG
diff -puN drivers/cdrom/mcd.c~RD6-release-B6 drivers/cdrom/mcd.c
--- 25/drivers/cdrom/mcd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/mcd.c	2003-11-04 22:00:44.000000000 -0800
@@ -219,7 +219,7 @@ static int mcd_block_open(struct block_d
 	return cdrom_open(&mcd_info, bdev, file);
 }
 
-static int mcd_block_release(struct inode *inode, struct file *file)
+static int mcd_block_release(struct gendisk *disk)
 {
 	return cdrom_release(&mcd_info);
 }
diff -puN drivers/cdrom/mcdx.c~RD6-release-B6 drivers/cdrom/mcdx.c
--- 25/drivers/cdrom/mcdx.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/mcdx.c	2003-11-04 22:00:44.000000000 -0800
@@ -227,9 +227,9 @@ static int mcdx_block_open(struct block_
 	return cdrom_open(&p->info, bdev, file);
 }
 
-static int mcdx_block_release(struct inode *inode, struct file *file)
+static int mcdx_block_release(struct gendisk *disk)
 {
-	struct s_drive_stuff *p = inode->i_bdev->bd_disk->private_data;
+	struct s_drive_stuff *p = disk->private_data;
 	return cdrom_release(&p->info);
 }
 
diff -puN drivers/cdrom/optcd.c~RD6-release-B6 drivers/cdrom/optcd.c
--- 25/drivers/cdrom/optcd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/optcd.c	2003-11-04 22:00:44.000000000 -0800
@@ -1901,13 +1901,12 @@ err_out:
 
 
 /* Release device special file; flush all blocks from the buffer cache */
-static int opt_release(struct inode *ip, struct file *fp)
+static int opt_release(struct gendisk *disk)
 {
 	int status;
 
 	DEBUG((DEBUG_VFS, "executing opt_release"));
-	DEBUG((DEBUG_VFS, "inode: %p, device: %s, file: %p\n",
-		ip, ip->i_bdev->bd_disk->disk_name, fp));
+	DEBUG((DEBUG_VFS, "disk: %p, device: %s\n", disk, disk->disk_name));
 
 	if (!--open_count) {
 		toc_uptodate = 0;
diff -puN drivers/cdrom/sbpcd.c~RD6-release-B6 drivers/cdrom/sbpcd.c
--- 25/drivers/cdrom/sbpcd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/sbpcd.c	2003-11-04 22:00:44.000000000 -0800
@@ -5362,9 +5362,9 @@ static int sbpcd_block_open(struct block
 	return cdrom_open(p->sbpcd_infop, bdev, file);
 }
 
-static int sbpcd_block_release(struct inode *inode, struct file *file)
+static int sbpcd_block_release(struct gendisk *disk)
 {
-	struct sbpcd_drive *p = inode->i_bdev->bd_disk->private_data;
+	struct sbpcd_drive *p = disk->private_data;
 	return cdrom_release(p->sbpcd_infop);
 }
 
diff -puN drivers/cdrom/sjcd.c~RD6-release-B6 drivers/cdrom/sjcd.c
--- 25/drivers/cdrom/sjcd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/sjcd.c	2003-11-04 22:00:44.000000000 -0800
@@ -1608,7 +1608,7 @@ static int sjcd_open(struct block_device
 /*
  * On close, we flush all sjcd blocks from the buffer cache.
  */
-static int sjcd_release(struct inode *inode, struct file *file)
+static int sjcd_release(struct gendisk *disk)
 {
 	int s;
 
diff -puN drivers/cdrom/sonycd535.c~RD6-release-B6 drivers/cdrom/sonycd535.c
--- 25/drivers/cdrom/sonycd535.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/cdrom/sonycd535.c	2003-11-04 22:00:44.000000000 -0800
@@ -1400,9 +1400,7 @@ static int cdu_open(struct block_device 
  * Close the drive.  Spin it down if no task is using it.  The spin
  * down will fail if playing audio, so audio play is OK.
  */
-static int
-cdu_release(struct inode *inode,
-			struct file *filp)
+static int cdu_release(struct gendisk *disk)
 {
 	Byte status[2], cmd_no;
 
diff -puN drivers/ide/ide-cd.c~RD6-release-B6 drivers/ide/ide-cd.c
--- 25/drivers/ide/ide-cd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/ide/ide-cd.c	2003-11-04 22:00:44.000000000 -0800
@@ -3345,9 +3345,9 @@ static int idecd_open(struct block_devic
 	return rc;
 }
 
-static int idecd_release(struct inode * inode, struct file * file)
+static int idecd_release(struct gendisk *disk)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = disk->private_data;
 	struct cdrom_info *info = drive->driver_data;
 
 	cdrom_release(&info->devinfo);
diff -puN drivers/ide/ide-disk.c~RD6-release-B6 drivers/ide/ide-disk.c
--- 25/drivers/ide/ide-disk.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/ide/ide-disk.c	2003-11-04 22:00:44.000000000 -0800
@@ -1782,9 +1782,9 @@ static int ide_cacheflush_p(ide_drive_t 
 	return 0;
 }
 
-static int idedisk_release(struct inode *inode, struct file *filp)
+static int idedisk_release(struct gendisk *disk)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = disk->private_data;
 	if (drive->removable && drive->usage == 1) {
 		ide_task_t args;
 		memset(&args, 0, sizeof(ide_task_t));
diff -puN drivers/ide/ide-floppy.c~RD6-release-B6 drivers/ide/ide-floppy.c
--- 25/drivers/ide/ide-floppy.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/ide/ide-floppy.c	2003-11-04 22:00:44.000000000 -0800
@@ -1916,9 +1916,9 @@ static int idefloppy_open(struct block_d
 	return 0;
 }
 
-static int idefloppy_release(struct inode *inode, struct file *filp)
+static int idefloppy_release(struct gendisk *disk)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = disk->private_data;
 	idefloppy_pc_t pc;
 	
 	debug_log(KERN_INFO "Reached idefloppy_release\n");
diff -puN drivers/ide/ide-tape.c~RD6-release-B6 drivers/ide/ide-tape.c
--- 25/drivers/ide/ide-tape.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/ide/ide-tape.c	2003-11-04 22:00:44.000000000 -0800
@@ -6313,9 +6313,9 @@ static int idetape_open(struct block_dev
 	return 0;
 }
 
-static int idetape_release(struct inode *inode, struct file *filp)
+static int idetape_release(struct gendisk *disk)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = disk->private_data;
 	drive->usage--;
 	return 0;
 }
diff -puN drivers/md/dm.c~RD6-release-B6 drivers/md/dm.c
--- 25/drivers/md/dm.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/md/dm.c	2003-11-04 22:00:44.000000000 -0800
@@ -167,11 +167,9 @@ static int dm_blk_open(struct block_devi
 	return 0;
 }
 
-static int dm_blk_close(struct inode *inode, struct file *file)
+static int dm_blk_close(struct gendisk *disk)
 {
-	struct mapped_device *md;
-
-	md = inode->i_bdev->bd_disk->private_data;
+	struct mapped_device *md = disk->private_data;
 	dm_put(md);
 	return 0;
 }
diff -puN drivers/md/md.c~RD6-release-B6 drivers/md/md.c
--- 25/drivers/md/md.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/md/md.c	2003-11-04 22:00:44.000000000 -0800
@@ -2622,9 +2622,9 @@ static int md_open(struct block_device *
 	return err;
 }
 
-static int md_release(struct inode *inode, struct file * file)
+static int md_release(struct gendisk *disk)
 {
- 	mddev_t *mddev = inode->i_bdev->bd_inode->u.generic_ip;
+ 	mddev_t *mddev = disk->private_data;
 
 	if (!mddev)
 		BUG();
diff -puN drivers/message/i2o/i2o_block.c~RD6-release-B6 drivers/message/i2o/i2o_block.c
--- 25/drivers/message/i2o/i2o_block.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/message/i2o/i2o_block.c	2003-11-04 22:00:44.000000000 -0800
@@ -927,9 +927,8 @@ static int i2ob_ioctl(struct block_devic
  *	Close the block device down
  */
  
-static int i2ob_release(struct inode *inode, struct file *file)
+static int i2ob_release(struct gendisk *disk)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
 	struct i2ob_device *dev = disk->private_data;
 
 	/*
diff -puN drivers/mtd/mtd_blkdevs.c~RD6-release-B6 drivers/mtd/mtd_blkdevs.c
--- 25/drivers/mtd/mtd_blkdevs.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/mtd/mtd_blkdevs.c	2003-11-04 22:00:44.000000000 -0800
@@ -170,15 +170,12 @@ static int blktrans_open(struct block_de
 	return ret;
 }
 
-int blktrans_release(struct inode *i, struct file *f)
+static int blktrans_release(struct gendisk *disk)
 {
-	struct mtd_blktrans_dev *dev;
-	struct mtd_blktrans_ops *tr;
+	struct mtd_blktrans_dev *dev = disk->private_data;
+	struct mtd_blktrans_ops *tr = dev->tr;
 	int ret = 0;
 
-	dev = i->i_bdev->bd_disk->private_data;
-	tr = dev->tr;
-
 	if (tr->release)
 		ret = tr->release(dev);
 
diff -puN drivers/s390/block/dasd.c~RD6-release-B6 drivers/s390/block/dasd.c
--- 25/drivers/s390/block/dasd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/s390/block/dasd.c	2003-11-04 22:00:44.000000000 -0800
@@ -1676,10 +1676,8 @@ out:
 	return rc;
 }
 
-static int
-dasd_release(struct inode *inp, struct file *filp)
+static int dasd_release(struct gendisk *disk)
 {
-	struct gendisk *disk = inp->i_bdev->bd_disk;
 	struct dasd_device *device = disk->private_data;
 
 	if (device->state < DASD_STATE_BASIC) {
diff -puN drivers/s390/char/tape_block.c~RD6-release-B6 drivers/s390/char/tape_block.c
--- 25/drivers/s390/char/tape_block.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/s390/char/tape_block.c	2003-11-04 22:00:44.000000000 -0800
@@ -28,7 +28,7 @@
  * file operation structure for tape block frontend
  */
 static int tapeblock_open(block_device *, struct file *);
-static int tapeblock_release(struct inode *, struct file *);
+static int tapeblock_release(struct gendisk *);
 
 static struct block_device_operations tapeblock_fops = {
 	.owner		= THIS_MODULE,
@@ -336,9 +336,8 @@ tapeblock_open(struct block_device *bdev
  * Block frontend tape device release function.
  */
 static int
-tapeblock_release(struct inode *inode, struct file *filp)
+tapeblock_release(struct gendisk *disk)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
 	struct tape_device *device = disk->private_data;
 
 	tape_release(device);
diff -puN drivers/scsi/ide-scsi.c~RD6-release-B6 drivers/scsi/ide-scsi.c
--- 25/drivers/scsi/ide-scsi.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/scsi/ide-scsi.c	2003-11-04 22:00:44.000000000 -0800
@@ -642,9 +642,9 @@ static int idescsi_ide_open(struct block
 	return 0;
 }
 
-static int idescsi_ide_release(struct inode *inode, struct file *filp)
+static int idescsi_ide_release(struct gendisk *disk)
 {
-	ide_drive_t *drive = inode->i_bdev->bd_disk->private_data;
+	ide_drive_t *drive = disk->private_data;
 	drive->usage--;
 	return 0;
 }
diff -puN drivers/scsi/sd.c~RD6-release-B6 drivers/scsi/sd.c
--- 25/drivers/scsi/sd.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/scsi/sd.c	2003-11-04 22:00:44.000000000 -0800
@@ -453,9 +453,8 @@ error_out:
  *	Note: may block (uninterruptible) if error recovery is underway
  *	on this disk.
  **/
-static int sd_release(struct inode *inode, struct file *filp)
+static int sd_release(struct gendisk *disk)
 {
-	struct gendisk *disk = inode->i_bdev->bd_disk;
 	struct scsi_disk *sdkp = scsi_disk(disk);
 	struct scsi_device *sdev = sdkp->device;
 
diff -puN drivers/scsi/sr.c~RD6-release-B6 drivers/scsi/sr.c
--- 25/drivers/scsi/sr.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/drivers/scsi/sr.c	2003-11-04 22:00:44.000000000 -0800
@@ -419,9 +419,9 @@ static int sr_block_open(struct block_de
 	return cdrom_open(&cd->cdi, bdev, file);
 }
 
-static int sr_block_release(struct inode *inode, struct file *file)
+static int sr_block_release(struct gendisk *disk)
 {
-	struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk);
+	struct scsi_cd *cd = scsi_cd(disk);
 	return cdrom_release(&cd->cdi);
 }
 
diff -puN fs/block_dev.c~RD6-release-B6 fs/block_dev.c
--- 25/fs/block_dev.c~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/fs/block_dev.c	2003-11-04 22:00:44.000000000 -0800
@@ -687,7 +687,6 @@ EXPORT_SYMBOL(blkdev_open);
 int blkdev_put(struct block_device *bdev, int kind)
 {
 	int ret = 0;
-	struct inode *bd_inode = bdev->bd_inode;
 	struct gendisk *disk = bdev->bd_disk;
 
 	down(&bdev->bd_sem);
@@ -696,14 +695,14 @@ int blkdev_put(struct block_device *bdev
 		switch (kind) {
 		case BDEV_FILE:
 		case BDEV_FS:
-			sync_blockdev(bd_inode->i_bdev);
+			sync_blockdev(bdev);
 			break;
 		}
 		kill_bdev(bdev);
 	}
 	if (bdev->bd_contains == bdev) {
 		if (disk->fops->release)
-			ret = disk->fops->release(bd_inode, NULL);
+			ret = disk->fops->release(disk);
 	} else {
 		down(&bdev->bd_contains->bd_sem);
 		bdev->bd_contains->bd_part_count--;
diff -puN include/linux/fs.h~RD6-release-B6 include/linux/fs.h
--- 25/include/linux/fs.h~RD6-release-B6	2003-11-04 22:00:44.000000000 -0800
+++ 25-akpm/include/linux/fs.h	2003-11-04 22:00:44.000000000 -0800
@@ -759,7 +759,7 @@ typedef int (*filldir_t)(void *, const c
 
 struct block_device_operations {
 	int (*open) (struct block_device *, struct file *);
-	int (*release) (struct inode *, struct file *);
+	int (*release) (struct gendisk *);
 	int (*ioctl) (struct block_device *, struct file *, unsigned, unsigned long);
 	int (*media_changed) (struct gendisk *);
 	int (*revalidate_disk) (struct gendisk *);

_