Re: [PATCH] Fix root hole in raw device

From: Peter Osterlund (petero2_at_telia.com)
Date: 05/22/05

  • Next message: Yani Ioannou: "Re: [lm-sensors] [PATCH 2.6.12-rc4 15/15] drivers/i2c/chips/adm1026.c: use dynamic sysfs callbacks"
    To: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
    Date:	22 May 2005 13:57:14 +0200
    
    

    Peter Osterlund <petero2@telia.com> writes:

    > Al Viro <viro@parcelfarce.linux.theplanet.co.uk> writes:
    >
    > > On Tue, May 17, 2005 at 02:04:42PM +0100, Stephen C. Tweedie wrote:
    > > >
    > > > On Tue, 2005-05-17 at 05:57, Al Viro wrote:
    > > >
    > > > > That is not quite correct. You are passing very odd filp to ->ioctl()...
    > > > > Old variant gave NULL, which is also not too nice, though.
    > > >
    > > > Which would you prefer? I guess that if there _are_ going to be
    > > > problems, we'd be better off finding them early by passing in the NULL
    > > > value.
    > >
    > > For now I'd rather pass NULL. Longer term (== post 2.6.12, since There Is No
    > > 2.7(tm)) - just remove the struct file * argument of bdev ioctl and have
    > > int flags used instead, with "opened for write" and "opened non-blocking"
    > > passed in it. And switch the inode argument to bdev...
    >
    > Switching the inode argument to bdev would first require doing the
    > same switch in cdrom_ioctl(), which the patch below does.

    And this patch does the same for the blkdev_ioctl() function.

    -
    Switch the inode argument in blkdev_ioctl() from inode to bdev.
    Suggested by Al Viro.

    Signed-off-by: Peter Osterlund <petero2@telia.com>

    ---
     linux-petero/arch/um/drivers/ubd_kern.c      |    8 ++++----
     linux-petero/drivers/acorn/block/fd1772.c    |    6 ++----
     linux-petero/drivers/acorn/block/mfmhd.c     |    6 +++---
     linux-petero/drivers/block/DAC960.c          |    6 +++---
     linux-petero/drivers/block/acsi.c            |    8 ++++----
     linux-petero/drivers/block/amiflop.c         |    8 ++++----
     linux-petero/drivers/block/aoe/aoeblk.c      |    6 +++---
     linux-petero/drivers/block/ataflop.c         |    8 ++++----
     linux-petero/drivers/block/cciss.c           |    9 ++++-----
     linux-petero/drivers/block/cpqarray.c        |   12 ++++++------
     linux-petero/drivers/block/floppy.c          |   10 +++++-----
     linux-petero/drivers/block/ioctl.c           |    9 ++++-----
     linux-petero/drivers/block/loop.c            |   10 +++++-----
     linux-petero/drivers/block/nbd.c             |   20 ++++++++++----------
     linux-petero/drivers/block/paride/pcd.c      |    6 +++---
     linux-petero/drivers/block/paride/pd.c       |    6 +++---
     linux-petero/drivers/block/paride/pf.c       |    6 +++---
     linux-petero/drivers/block/pktcdvd.c         |   10 +++++-----
     linux-petero/drivers/block/ps2esdi.c         |    8 ++++----
     linux-petero/drivers/block/rd.c              |    3 +--
     linux-petero/drivers/block/swim3.c           |    6 +++---
     linux-petero/drivers/block/swim_iop.c        |    6 +++---
     linux-petero/drivers/block/sx8.c             |    8 ++++----
     linux-petero/drivers/block/ub.c              |    4 ++--
     linux-petero/drivers/block/umem.c            |    6 +++---
     linux-petero/drivers/block/viodasd.c         |    6 +++---
     linux-petero/drivers/block/xd.c              |    6 +++---
     linux-petero/drivers/block/xd.h              |    2 +-
     linux-petero/drivers/cdrom/aztcd.c           |    6 ++----
     linux-petero/drivers/cdrom/cdu31a.c          |    4 ++--
     linux-petero/drivers/cdrom/cm206.c           |    4 ++--
     linux-petero/drivers/cdrom/gscd.c            |    4 ++--
     linux-petero/drivers/cdrom/mcdx.c            |    6 +++---
     linux-petero/drivers/cdrom/optcd.c           |    5 +----
     linux-petero/drivers/cdrom/sbpcd.c           |    6 +++---
     linux-petero/drivers/cdrom/sjcd.c            |    2 +-
     linux-petero/drivers/cdrom/sonycd535.c       |    2 +-
     linux-petero/drivers/cdrom/viocd.c           |    6 +++---
     linux-petero/drivers/char/raw.c              |    2 +-
     linux-petero/drivers/ide/ide-cd.c            |    5 ++---
     linux-petero/drivers/ide/ide-disk.c          |    3 +--
     linux-petero/drivers/ide/ide-floppy.c        |    3 +--
     linux-petero/drivers/ide/ide-tape.c          |    3 +--
     linux-petero/drivers/ide/legacy/hd.c         |    6 +++---
     linux-petero/drivers/md/md.c                 |    6 +++---
     linux-petero/drivers/message/i2o/i2o_block.c |    6 +++---
     linux-petero/drivers/mmc/mmc_block.c         |    4 +---
     linux-petero/drivers/mtd/mtd_blkdevs.c       |    6 +++---
     linux-petero/drivers/s390/block/dasd_int.h   |    2 +-
     linux-petero/drivers/s390/block/dasd_ioctl.c |    4 ++--
     linux-petero/drivers/s390/block/xpram.c      |    2 +-
     linux-petero/drivers/s390/char/tape_block.c  |   10 +++++-----
     linux-petero/drivers/scsi/ide-scsi.c         |    3 +--
     linux-petero/drivers/scsi/sd.c               |    3 +--
     linux-petero/drivers/scsi/sr.c               |    6 +++---
     linux-petero/fs/block_dev.c                  |    4 ++--
     linux-petero/include/linux/fs.h              |    4 ++--
     57 files changed, 159 insertions(+), 177 deletions(-)
    diff -puN arch/um/drivers/ubd_kern.c~blkdev_ioctl_use_bdev arch/um/drivers/ubd_kern.c
    --- linux/arch/um/drivers/ubd_kern.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/arch/um/drivers/ubd_kern.c	2005-05-22 12:47:38.000000000 +0200
    @@ -115,7 +115,7 @@ static void (*do_ubd)(void);
     
     static int ubd_open(struct inode * inode, struct file * filp);
     static int ubd_release(struct inode * inode, struct file * file);
    -static int ubd_ioctl(struct inode * inode, struct file * file,
    +static int ubd_ioctl(struct block_device * bdev, struct file * file,
     		     unsigned int cmd, unsigned long arg);
     
     #define MAX_DEV (8)
    @@ -1042,11 +1042,11 @@ static void do_ubd_request(request_queue
     	}
     }
     
    -static int ubd_ioctl(struct inode * inode, struct file * file,
    +static int ubd_ioctl(struct block_device * bdev, struct file * file,
     		     unsigned int cmd, unsigned long arg)
     {
     	struct hd_geometry __user *loc = (struct hd_geometry __user *) arg;
    -	struct ubd *dev = inode->i_bdev->bd_disk->private_data;
    +	struct ubd *dev = bdev->bd_disk->private_data;
     	struct hd_driveid ubd_id = {
     		.cyls		= 0,
     		.heads		= 128,
    @@ -1061,7 +1061,7 @@ static int ubd_ioctl(struct inode * inod
     		g.heads = 128;
     		g.sectors = 32;
     		g.cylinders = dev->size / (128 * 32 * 512);
    -		g.start = get_start_sect(inode->i_bdev);
    +		g.start = get_start_sect(bdev);
     		return(copy_to_user(loc, &g, sizeof(g)) ? -EFAULT : 0);
     
     	case HDIO_GET_IDENTITY:
    diff -puN drivers/acorn/block/fd1772.c~blkdev_ioctl_use_bdev drivers/acorn/block/fd1772.c
    --- linux/drivers/acorn/block/fd1772.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/acorn/block/fd1772.c	2005-05-22 12:47:38.000000000 +0200
    @@ -365,7 +365,7 @@ static void finish_fdc_done(int dummy);
     static void floppy_off(unsigned int nr);
     static void setup_req_params(int drive);
     static void redo_fd_request(void);
    -static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int
    +static int fd_ioctl(struct block_device *bdev, struct file *filp, unsigned int
     		    cmd, unsigned long param);
     static void fd_probe(int drive);
     static int fd_test_drive_present(int drive);
    @@ -1309,11 +1309,9 @@ static int invalidate_drive(struct block
     	return 0;
     }
     
    -static int fd_ioctl(struct inode *inode, struct file *filp,
    +static int fd_ioctl(struct block_device *bdev, struct file *filp,
     		    unsigned int cmd, unsigned long param)
     {
    -	struct block_device *bdev = inode->i_bdev;
    -
     	switch (cmd) {
     	case FDFMTEND:
     	case FDFLUSH:
    diff -puN drivers/acorn/block/mfmhd.c~blkdev_ioctl_use_bdev drivers/acorn/block/mfmhd.c
    --- linux/drivers/acorn/block/mfmhd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/acorn/block/mfmhd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1153,9 +1153,9 @@ static int mfm_initdrives(void)
      * The 'front' end of the mfm driver follows...
      */
     
    -static int mfm_ioctl(struct inode *inode, struct file *file, u_int cmd, u_long arg)
    +static int mfm_ioctl(struct block_device *bdev, struct file *file, u_int cmd, u_long arg)
     {
    -	struct mfm_info *p = inode->i_bdev->bd_disk->private_data;
    +	struct mfm_info *p = bdev->bd_disk->private_data;
     	struct hd_geometry *geo = (struct hd_geometry *) arg;
     	if (cmd != HDIO_GETGEO)
     		return -EINVAL;
    @@ -1167,7 +1167,7 @@ static int mfm_ioctl(struct inode *inode
     		return -EFAULT;
     	if (put_user (p->cylinders, &geo->cylinders))
     		return -EFAULT;
    -	if (put_user (get_start_sect(inode->i_bdev), &geo->start))
    +	if (put_user (get_start_sect(bdev), &geo->start))
     		return -EFAULT;
     	return 0;
     }
    diff -puN drivers/block/DAC960.c~blkdev_ioctl_use_bdev drivers/block/DAC960.c
    --- linux/drivers/block/DAC960.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/DAC960.c	2005-05-22 12:47:38.000000000 +0200
    @@ -92,10 +92,10 @@ static int DAC960_open(struct inode *ino
     	return 0;
     }
     
    -static int DAC960_ioctl(struct inode *inode, struct file *file,
    +static int DAC960_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
    -	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;
     	struct hd_geometry g;
    @@ -130,7 +130,7 @@ static int DAC960_ioctl(struct inode *in
     		g.cylinders = i->ConfigurableDeviceSize / (g.heads * g.sectors);
     	}
     	
    -	g.start = get_start_sect(inode->i_bdev);
    +	g.start = get_start_sect(bdev);
     
     	return copy_to_user(loc, &g, sizeof g) ? -EFAULT : 0; 
     }
    diff -puN drivers/block/acsi.c~blkdev_ioctl_use_bdev drivers/block/acsi.c
    --- linux/drivers/block/acsi.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/acsi.c	2005-05-22 12:47:38.000000000 +0200
    @@ -359,7 +359,7 @@ static void copy_from_acsibuffer( void )
     static void do_end_requests( void );
     static void do_acsi_request( request_queue_t * );
     static void redo_acsi_request( void );
    -static int acsi_ioctl( struct inode *inode, struct file *file, unsigned int
    +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_release( struct inode * inode, struct file * file );
    @@ -1081,10 +1081,10 @@ static void redo_acsi_request( void )
      ***********************************************************************/
     
     
    -static int acsi_ioctl( struct inode *inode, struct file *file,
    +static int acsi_ioctl( struct block_device *bdev, struct file *file,
     					   unsigned int cmd, unsigned long arg )
     {
    -	struct gendisk *disk = inode->i_bdev->bd_disk;
    +	struct gendisk *disk = bdev->bd_disk;
     	struct acsi_info_struct *aip = disk->private_data;
     	switch (cmd) {
     	  case HDIO_GETGEO:
    @@ -1096,7 +1096,7 @@ static int acsi_ioctl( struct inode *ino
     	    put_user( 64, &geo->heads );
     	    put_user( 32, &geo->sectors );
     	    put_user( aip->size >> 11, &geo->cylinders );
    -		put_user(get_start_sect(inode->i_bdev), &geo->start);
    +		put_user(get_start_sect(bdev), &geo->start);
     		return 0;
     	  }
     	  case SCSI_IOCTL_GET_IDLUN:
    diff -puN drivers/block/amiflop.c~blkdev_ioctl_use_bdev drivers/block/amiflop.c
    --- linux/drivers/block/amiflop.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/amiflop.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1424,10 +1424,10 @@ static void do_fd_request(request_queue_
     	redo_fd_request();
     }
     
    -static int fd_ioctl(struct inode *inode, struct file *filp,
    +static int fd_ioctl(struct block_device *bdev, struct file *filp,
     		    unsigned int cmd, unsigned long param)
     {
    -	int drive = iminor(inode) & 3;
    +	int drive = iminor(bdev->bd_inode) & 3;
     	static struct floppy_struct getprm;
     
     	switch(cmd){
    @@ -1449,7 +1449,7 @@ static int fd_ioctl(struct inode *inode,
     			rel_fdc();
     			return -EBUSY;
     		}
    -		fsync_bdev(inode->i_bdev);
    +		fsync_bdev(bdev);
     		if (fd_motor_on(drive) == 0) {
     			rel_fdc();
     			return -ENODEV;
    @@ -1478,7 +1478,7 @@ static int fd_ioctl(struct inode *inode,
     		break;
     	case FDFMTEND:
     		floppy_off(drive);
    -		invalidate_bdev(inode->i_bdev, 0);
    +		invalidate_bdev(bdev, 0);
     		break;
     	case FDGETPRM:
     		memset((void *)&getprm, 0, sizeof (getprm));
    diff -puN drivers/block/aoe/aoeblk.c~blkdev_ioctl_use_bdev drivers/block/aoe/aoeblk.c
    --- linux/drivers/block/aoe/aoeblk.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/aoe/aoeblk.c	2005-05-22 12:47:38.000000000 +0200
    @@ -174,21 +174,21 @@ aoeblk_make_request(request_queue_t *q, 
      * block device directly.
      */
     static int
    -aoeblk_ioctl(struct inode *inode, struct file *filp, uint cmd, ulong arg)
    +aoeblk_ioctl(struct block_device *bdev, struct file *filp, uint cmd, ulong arg)
     {
     	struct aoedev *d;
     
     	if (!arg)
     		return -EINVAL;
     
    -	d = inode->i_bdev->bd_disk->private_data;
    +	d = bdev->bd_disk->private_data;
     	if ((d->flags & DEVFL_UP) == 0) {
     		printk(KERN_ERR "aoe: aoeblk_ioctl: disk not up\n");
     		return -ENODEV;
     	}
     
     	if (cmd == HDIO_GETGEO) {
    -		d->geo.start = get_start_sect(inode->i_bdev);
    +		d->geo.start = get_start_sect(bdev);
     		if (!copy_to_user((void __user *) arg, &d->geo, sizeof d->geo))
     			return 0;
     		return -EFAULT;
    diff -puN drivers/block/ataflop.c~blkdev_ioctl_use_bdev drivers/block/ataflop.c
    --- linux/drivers/block/ataflop.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/ataflop.c	2005-05-22 12:47:38.000000000 +0200
    @@ -361,7 +361,7 @@ static void finish_fdc( void );
     static void finish_fdc_done( int dummy );
     static void setup_req_params( int drive );
     static void redo_fd_request( void);
    -static int fd_ioctl( struct inode *inode, struct file *filp, unsigned int
    +static int fd_ioctl( struct block_device *bdev, struct file *filp, unsigned int
                          cmd, unsigned long param);
     static void fd_probe( int drive );
     static int fd_test_drive_present( int drive );
    @@ -1489,10 +1489,10 @@ void do_fd_request(request_queue_t * q)
     	atari_enable_irq( IRQ_MFP_FDC );
     }
     
    -static int fd_ioctl(struct inode *inode, struct file *filp,
    +static int fd_ioctl(struct block_device *bdev, struct file *filp,
     		    unsigned int cmd, unsigned long param)
     {
    -	struct gendisk *disk = inode->i_bdev->bd_disk;
    +	struct gendisk *disk = bdev->bd_disk;
     	struct atari_floppy_struct *floppy = disk->private_data;
     	int drive = floppy - unit;
     	int type = floppy->type;
    @@ -1666,7 +1666,7 @@ static int fd_ioctl(struct inode *inode,
     		/* invalidate the buffer track to force a reread */
     		BufferDrive = -1;
     		set_bit(drive, &fake_change);
    -		check_disk_change(inode->i_bdev);
    +		check_disk_change(bdev);
     		return 0;
     	default:
     		return -EINVAL;
    diff -puN drivers/block/cciss.c~blkdev_ioctl_use_bdev drivers/block/cciss.c
    --- linux/drivers/block/cciss.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/cciss.c	2005-05-22 12:47:38.000000000 +0200
    @@ -133,7 +133,7 @@ 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_release(struct inode *inode, struct file *filep);
    -static int cciss_ioctl(struct inode *inode, struct file *filep, 
    +static int cciss_ioctl(struct block_device *bdev, struct file *filep,
     		unsigned int cmd, unsigned long arg);
     
     static int revalidate_allvol(ctlr_info_t *host);
    @@ -499,7 +499,7 @@ static int do_ioctl(struct file *f, unsi
     {
     	int ret;
     	lock_kernel();
    -	ret = cciss_ioctl(f->f_dentry->d_inode, f, cmd, arg);
    +	ret = cciss_ioctl(f->f_dentry->d_inode->i_bdev, f, cmd, arg);
     	unlock_kernel();
     	return ret;
     }
    @@ -601,10 +601,9 @@ static int cciss_ioctl32_big_passthru(st
     /*
      * ioctl 
      */
    -static int cciss_ioctl(struct inode *inode, struct file *filep, 
    +static int cciss_ioctl(struct block_device *bdev, struct file *filep,
     		unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct gendisk *disk = bdev->bd_disk;
     	ctlr_info_t *host = get_host(disk);
     	drive_info_struct *drv = get_drv(disk);
    @@ -625,7 +624,7 @@ static int cciss_ioctl(struct inode *ino
                             driver_geo.cylinders = drv->cylinders;
                     } else
     			return -ENXIO;
    -                driver_geo.start= get_start_sect(inode->i_bdev);
    +                driver_geo.start= get_start_sect(bdev);
                     if (copy_to_user(argp, &driver_geo, sizeof(struct hd_geometry)))
                             return  -EFAULT;
                     return(0);
    diff -puN drivers/block/cpqarray.c~blkdev_ioctl_use_bdev drivers/block/cpqarray.c
    --- linux/drivers/block/cpqarray.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/cpqarray.c	2005-05-22 13:07:05.000000000 +0200
    @@ -159,7 +159,7 @@ static int sendcmd(
     
     static int ida_open(struct inode *inode, struct file *filep);
     static int ida_release(struct inode *inode, struct file *filep);
    -static int ida_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg);
    +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);
     
     static void do_ida_request(request_queue_t *q);
    @@ -1128,10 +1128,10 @@ static void ida_timer(unsigned long tdat
      *  ida_ioctl does some miscellaneous stuff like reporting drive geometry,
      *  setting readahead and submitting commands from userspace to the controller.
      */
    -static int ida_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg)
    +static int ida_ioctl(struct block_device *bdev, struct file *filep, unsigned int cmd, unsigned long arg)
     {
    -	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);
     	int error;
     	int diskinfo[4];
     	struct hd_geometry __user *geo = (struct hd_geometry __user *)arg;
    @@ -1152,7 +1152,7 @@ static int ida_ioctl(struct inode *inode
     		put_user(diskinfo[0], &geo->heads);
     		put_user(diskinfo[1], &geo->sectors);
     		put_user(diskinfo[2], &geo->cylinders);
    -		put_user(get_start_sect(inode->i_bdev), &geo->start);
    +		put_user(get_start_sect(bdev), &geo->start);
     		return 0;
     	case IDAGETDRVINFO:
     		if (copy_to_user(&io->c.drv, drv, sizeof(drv_info_t)))
    @@ -1182,7 +1182,7 @@ out_passthru:
     		put_user(host->ctlr_sig, (int __user *)arg);
     		return 0;
     	case IDAREVALIDATEVOLS:
    -		if (iminor(inode) != 0)
    +		if (iminor(bdev->bd_inode) != 0)
     			return -ENXIO;
     		return revalidate_allvol(host);
     	case IDADRIVERVERSION:
    diff -puN drivers/block/floppy.c~blkdev_ioctl_use_bdev drivers/block/floppy.c
    --- linux/drivers/block/floppy.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/floppy.c	2005-05-22 12:47:38.000000000 +0200
    @@ -3443,14 +3443,14 @@ static int get_floppy_geometry(int drive
     	return 0;
     }
     
    -static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
    +static int fd_ioctl(struct block_device *bdev, struct file *filp, unsigned int cmd,
     		    unsigned long param)
     {
     #define FD_IOCTL_ALLOWED ((filp) && (filp)->private_data)
     #define OUT(c,x) case c: outparam = (const char *) (x); break
     #define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0
     
    -	int drive = (long)inode->i_bdev->bd_disk->private_data;
    +	int drive = (long)bdev->bd_disk->private_data;
     	int i, type = ITYPE(UDRS->fd_device);
     	int ret;
     	int size;
    @@ -3525,11 +3525,11 @@ static int fd_ioctl(struct inode *inode,
     			current_type[drive] = NULL;
     			floppy_sizes[drive] = MAX_DISK_SIZE << 1;
     			UDRS->keep_data = 0;
    -			return invalidate_drive(inode->i_bdev);
    +			return invalidate_drive(bdev);
     		case FDSETPRM:
     		case FDDEFPRM:
     			return set_geometry(cmd, &inparam.g,
    -					    drive, type, inode->i_bdev);
    +					    drive, type, bdev);
     		case FDGETPRM:
     			ECALL(get_floppy_geometry(drive, type,
     						  (struct floppy_struct **)
    @@ -3560,7 +3560,7 @@ static int fd_ioctl(struct inode *inode,
     		case FDFMTEND:
     		case FDFLUSH:
     			LOCK_FDC(drive, 1);
    -			return invalidate_drive(inode->i_bdev);
    +			return invalidate_drive(bdev);
     
     		case FDSETEMSGTRESH:
     			UDP->max_errors.reporting =
    diff -puN drivers/block/ioctl.c~blkdev_ioctl_use_bdev drivers/block/ioctl.c
    --- linux/drivers/block/ioctl.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/ioctl.c	2005-05-22 12:47:38.000000000 +0200
    @@ -133,10 +133,9 @@ static int put_u64(unsigned long arg, u6
     	return put_user(val, (u64 __user *)arg);
     }
     
    -int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,
    +int blkdev_ioctl(struct block_device *bdev, struct file *file, unsigned cmd,
     			unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct gendisk *disk = bdev->bd_disk;
     	struct backing_dev_info *bdi;
     	int ret, n;
    @@ -194,7 +193,7 @@ int blkdev_ioctl(struct inode *inode, st
     		if (!capable(CAP_SYS_ADMIN))
     			return -EACCES;
     		if (disk->fops->ioctl) {
    -			ret = disk->fops->ioctl(inode, file, cmd, arg);
    +			ret = disk->fops->ioctl(bdev, file, cmd, arg);
     			/* -EINVAL to handle old uncorrected drivers */
     			if (ret != -EINVAL && ret != -ENOTTY)
     				return ret;
    @@ -204,7 +203,7 @@ int blkdev_ioctl(struct inode *inode, st
     		return 0;
     	case BLKROSET:
     		if (disk->fops->ioctl) {
    -			ret = disk->fops->ioctl(inode, file, cmd, arg);
    +			ret = disk->fops->ioctl(bdev, file, cmd, arg);
     			/* -EINVAL to handle old uncorrected drivers */
     			if (ret != -EINVAL && ret != -ENOTTY)
     				return ret;
    @@ -217,7 +216,7 @@ int blkdev_ioctl(struct inode *inode, st
     		return 0;
     	default:
     		if (disk->fops->ioctl)
    -			return disk->fops->ioctl(inode, file, cmd, arg);
    +			return disk->fops->ioctl(bdev, file, cmd, arg);
     	}
     	return -ENOTTY;
     }
    diff -puN drivers/block/loop.c~blkdev_ioctl_use_bdev drivers/block/loop.c
    --- linux/drivers/block/loop.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/loop.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1133,22 +1133,22 @@ loop_get_status64(struct loop_device *lo
     	return err;
     }
     
    -static int lo_ioctl(struct inode * inode, struct file * file,
    +static int lo_ioctl(struct block_device * bdev, struct file * file,
     	unsigned int cmd, unsigned long arg)
     {
    -	struct loop_device *lo = inode->i_bdev->bd_disk->private_data;
    +	struct loop_device *lo = bdev->bd_disk->private_data;
     	int err;
     
     	down(&lo->lo_ctl_mutex);
     	switch (cmd) {
     	case LOOP_SET_FD:
    -		err = loop_set_fd(lo, file, inode->i_bdev, arg);
    +		err = loop_set_fd(lo, file, bdev, arg);
     		break;
     	case LOOP_CHANGE_FD:
    -		err = loop_change_fd(lo, file, inode->i_bdev, arg);
    +		err = loop_change_fd(lo, file, bdev, arg);
     		break;
     	case LOOP_CLR_FD:
    -		err = loop_clr_fd(lo, inode->i_bdev);
    +		err = loop_clr_fd(lo, bdev);
     		break;
     	case LOOP_SET_STATUS:
     		err = loop_set_status_old(lo, (struct loop_info __user *) arg);
    diff -puN drivers/block/nbd.c~blkdev_ioctl_use_bdev drivers/block/nbd.c
    --- linux/drivers/block/nbd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/nbd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -491,10 +491,10 @@ error_out:
     	return;
     }
     
    -static int nbd_ioctl(struct inode *inode, struct file *file,
    +static int nbd_ioctl(struct block_device *bdev, struct file *file,
     		     unsigned int cmd, unsigned long arg)
     {
    -	struct nbd_device *lo = inode->i_bdev->bd_disk->private_data;
    +	struct nbd_device *lo = bdev->bd_disk->private_data;
     	int error;
     	struct request sreq ;
     
    @@ -549,7 +549,7 @@ static int nbd_ioctl(struct inode *inode
     		error = -EINVAL;
     		file = fget(arg);
     		if (file) {
    -			inode = file->f_dentry->d_inode;
    +			struct inode *inode = file->f_dentry->d_inode;
     			if (S_ISSOCK(inode->i_mode)) {
     				lo->file = file;
     				lo->sock = SOCKET_I(inode);
    @@ -562,20 +562,20 @@ static int nbd_ioctl(struct inode *inode
     	case NBD_SET_BLKSIZE:
     		lo->blksize = arg;
     		lo->bytesize &= ~(lo->blksize-1);
    -		inode->i_bdev->bd_inode->i_size = lo->bytesize;
    -		set_blocksize(inode->i_bdev, lo->blksize);
    +		bdev->bd_inode->i_size = lo->bytesize;
    +		set_blocksize(bdev, lo->blksize);
     		set_capacity(lo->disk, lo->bytesize >> 9);
     		return 0;
     	case NBD_SET_SIZE:
     		lo->bytesize = arg & ~(lo->blksize-1);
    -		inode->i_bdev->bd_inode->i_size = lo->bytesize;
    -		set_blocksize(inode->i_bdev, lo->blksize);
    +		bdev->bd_inode->i_size = lo->bytesize;
    +		set_blocksize(bdev, lo->blksize);
     		set_capacity(lo->disk, lo->bytesize >> 9);
     		return 0;
     	case NBD_SET_SIZE_BLOCKS:
     		lo->bytesize = ((u64) arg) * lo->blksize;
    -		inode->i_bdev->bd_inode->i_size = lo->bytesize;
    -		set_blocksize(inode->i_bdev, lo->blksize);
    +		bdev->bd_inode->i_size = lo->bytesize;
    +		set_blocksize(bdev, lo->blksize);
     		set_capacity(lo->disk, lo->bytesize >> 9);
     		return 0;
     	case NBD_DO_IT:
    @@ -619,7 +619,7 @@ static int nbd_ioctl(struct inode *inode
     		return 0;
     	case NBD_PRINT_DEBUG:
     		printk(KERN_INFO "%s: next = %p, prev = %p, head = %p\n",
    -			inode->i_bdev->bd_disk->disk_name,
    +			bdev->bd_disk->disk_name,
     			lo->queue_head.next, lo->queue_head.prev,
     			&lo->queue_head);
     		return 0;
    diff -puN drivers/block/paride/pcd.c~blkdev_ioctl_use_bdev drivers/block/paride/pcd.c
    --- linux/drivers/block/paride/pcd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/paride/pcd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -235,11 +235,11 @@ static int pcd_block_release(struct inod
     	return cdrom_release(&cd->info, file);
     }
     
    -static int pcd_block_ioctl(struct inode *inode, struct file *file,
    +static int pcd_block_ioctl(struct block_device *bdev, struct file *file,
     				unsigned cmd, unsigned long arg)
     {
    -	struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data;
    -	return cdrom_ioctl(file, &cd->info, inode->i_bdev, cmd, arg);
    +	struct pcd_unit *cd = bdev->bd_disk->private_data;
    +	return cdrom_ioctl(file, &cd->info, bdev, cmd, arg);
     }
     
     static int pcd_block_media_changed(struct gendisk *disk)
    diff -puN drivers/block/paride/pd.c~blkdev_ioctl_use_bdev drivers/block/paride/pd.c
    --- linux/drivers/block/paride/pd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/paride/pd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -747,10 +747,10 @@ static int pd_open(struct inode *inode, 
     	return 0;
     }
     
    -static int pd_ioctl(struct inode *inode, struct file *file,
    +static int pd_ioctl(struct block_device *bdev, struct file *file,
     	 unsigned int cmd, unsigned long arg)
     {
    -	struct pd_unit *disk = inode->i_bdev->bd_disk->private_data;
    +	struct pd_unit *disk = bdev->bd_disk->private_data;
     	struct hd_geometry __user *geo = (struct hd_geometry __user *) arg;
     	struct hd_geometry g;
     
    @@ -769,7 +769,7 @@ static int pd_ioctl(struct inode *inode,
     			g.sectors = disk->sectors;
     			g.cylinders = disk->cylinders;
     		}
    -		g.start = get_start_sect(inode->i_bdev);
    +		g.start = get_start_sect(bdev);
     		if (copy_to_user(geo, &g, sizeof(struct hd_geometry)))
     			return -EFAULT;
     		return 0;
    diff -puN drivers/block/paride/pf.c~blkdev_ioctl_use_bdev drivers/block/paride/pf.c
    --- linux/drivers/block/paride/pf.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/paride/pf.c	2005-05-22 12:47:38.000000000 +0200
    @@ -203,7 +203,7 @@ module_param_array(drive3, int, NULL, 0)
     
     static int pf_open(struct inode *inode, struct file *file);
     static void do_pf_request(request_queue_t * q);
    -static int pf_ioctl(struct inode *inode, struct file *file,
    +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);
    @@ -313,9 +313,9 @@ static int pf_open(struct inode *inode, 
     	return 0;
     }
     
    -static int pf_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
    +static int pf_ioctl(struct block_device *bdev, struct file *file, unsigned int cmd, unsigned long arg)
     {
    -	struct pf_unit *pf = inode->i_bdev->bd_disk->private_data;
    +	struct pf_unit *pf = bdev->bd_disk->private_data;
     	struct hd_geometry __user *geo = (struct hd_geometry __user *) arg;
     	struct hd_geometry g;
     	sector_t capacity;
    diff -puN drivers/block/pktcdvd.c~blkdev_ioctl_use_bdev drivers/block/pktcdvd.c
    --- linux/drivers/block/pktcdvd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/pktcdvd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -2458,11 +2458,11 @@ out_mem:
     	return ret;
     }
     
    -static int pkt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
    +static int pkt_ioctl(struct block_device *bdev, struct file *file, unsigned int cmd, unsigned long arg)
     {
    -	struct pktcdvd_device *pd = inode->i_bdev->bd_disk->private_data;
    +	struct pktcdvd_device *pd = bdev->bd_disk->private_data;
     
    -	VPRINTK("pkt_ioctl: cmd %x, dev %d:%d\n", cmd, imajor(inode), iminor(inode));
    +	VPRINTK("pkt_ioctl: cmd %x\n", cmd);
     	BUG_ON(!pd);
     
     	switch (cmd) {
    @@ -2474,7 +2474,7 @@ static int pkt_ioctl(struct inode *inode
     	case CDROM_LAST_WRITTEN:
     	case CDROM_SEND_PACKET:
     	case SCSI_IOCTL_SEND_COMMAND:
    -		return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg);
    +		return blkdev_ioctl(pd->bdev, file, cmd, arg);
     
     	case CDROMEJECT:
     		/*
    @@ -2482,7 +2482,7 @@ static int pkt_ioctl(struct inode *inode
     		 * have to unlock it or else the eject command fails.
     		 */
     		pkt_lock_door(pd, 0);
    -		return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg);
    +		return blkdev_ioctl(pd->bdev, file, cmd, arg);
     
     	default:
     		printk("pktcdvd: Unknown ioctl for %s (%x)\n", pd->name, cmd);
    diff -puN drivers/block/ps2esdi.c~blkdev_ioctl_use_bdev drivers/block/ps2esdi.c
    --- linux/drivers/block/ps2esdi.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/ps2esdi.c	2005-05-22 12:47:38.000000000 +0200
    @@ -81,7 +81,7 @@ static void (*current_int_handler) (u_in
     static void ps2esdi_normal_interrupt_handler(u_int);
     static void ps2esdi_initial_reset_int_handler(u_int);
     static void ps2esdi_geometry_int_handler(u_int);
    -static int ps2esdi_ioctl(struct inode *inode, struct file *file,
    +static int ps2esdi_ioctl(struct block_device *bdev, struct file *file,
     			 u_int cmd, u_long arg);
     
     static int ps2esdi_read_status_words(int num_words, int max_words, u_short * buffer);
    @@ -1059,10 +1059,10 @@ static void dump_cmd_complete_status(u_i
     
     }
     
    -static int ps2esdi_ioctl(struct inode *inode,
    +static int ps2esdi_ioctl(struct block_device *bdev,
     			 struct file *file, u_int cmd, u_long arg)
     {
    -	struct ps2esdi_i_struct *p = inode->i_bdev->bd_disk->private_data;
    +	struct ps2esdi_i_struct *p = bdev->bd_disk->private_data;
     	struct ps2esdi_geometry geom;
     
     	if (cmd != HDIO_GETGEO)
    @@ -1071,7 +1071,7 @@ static int ps2esdi_ioctl(struct inode *i
     	geom.heads = p->head;
     	geom.sectors = p->sect;
     	geom.cylinders = p->cyl;
    -	geom.start = get_start_sect(inode->i_bdev);
    +	geom.start = get_start_sect(bdev);
     	if (copy_to_user((void __user *)arg, &geom, sizeof(geom)))
     		return -EFAULT;
     	return 0;
    diff -puN drivers/block/rd.c~blkdev_ioctl_use_bdev drivers/block/rd.c
    --- linux/drivers/block/rd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/rd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -295,11 +295,10 @@ fail:
     	return 0;
     } 
     
    -static int rd_ioctl(struct inode *inode, struct file *file,
    +static int rd_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
     	int error;
    -	struct block_device *bdev = inode->i_bdev;
     
     	if (cmd != BLKFLSBUF)
     		return -ENOTTY;
    diff -puN drivers/block/swim3.c~blkdev_ioctl_use_bdev drivers/block/swim3.c
    --- linux/drivers/block/swim3.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/swim3.c	2005-05-22 12:47:38.000000000 +0200
    @@ -244,7 +244,7 @@ static int grab_drive(struct floppy_stat
     		      int interruptible);
     static void release_drive(struct floppy_state *fs);
     static int fd_eject(struct floppy_state *fs);
    -static int floppy_ioctl(struct inode *inode, struct file *filp,
    +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_release(struct inode *inode, struct file *filp);
    @@ -847,10 +847,10 @@ static int fd_eject(struct floppy_state 
     static struct floppy_struct floppy_type =
     	{ 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,NULL };	/*  7 1.44MB 3.5"   */
     
    -static int floppy_ioctl(struct inode *inode, struct file *filp,
    +static int floppy_ioctl(struct block_device *bdev, struct file *filp,
     			unsigned int cmd, unsigned long param)
     {
    -	struct floppy_state *fs = inode->i_bdev->bd_disk->private_data;
    +	struct floppy_state *fs = bdev->bd_disk->private_data;
     	int err;
     		
     	if ((cmd & 0x80) && !capable(CAP_SYS_ADMIN))
    diff -puN drivers/block/swim_iop.c~blkdev_ioctl_use_bdev drivers/block/swim_iop.c
    --- linux/drivers/block/swim_iop.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/swim_iop.c	2005-05-22 12:47:38.000000000 +0200
    @@ -98,7 +98,7 @@ static void swimiop_receive(struct iop_m
     static void swimiop_status_update(int, struct swim_drvstatus *);
     static int swimiop_eject(struct floppy_state *fs);
     
    -static int floppy_ioctl(struct inode *inode, struct file *filp,
    +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_release(struct inode *inode, struct file *filp);
    @@ -348,10 +348,10 @@ static int swimiop_eject(struct floppy_s
     static struct floppy_struct floppy_type =
     	{ 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,NULL };	/*  7 1.44MB 3.5"   */
     
    -static int floppy_ioctl(struct inode *inode, struct file *filp,
    +static int floppy_ioctl(struct block_device *bdev, struct file *filp,
     			unsigned int cmd, unsigned long param)
     {
    -	struct floppy_state *fs = inode->i_bdev->bd_disk->private_data;
    +	struct floppy_state *fs = bdev->bd_disk->private_data;
     	int err;
     
     	if ((cmd & 0x80) && !capable(CAP_SYS_ADMIN))
    diff -puN drivers/block/sx8.c~blkdev_ioctl_use_bdev drivers/block/sx8.c
    --- linux/drivers/block/sx8.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/sx8.c	2005-05-22 12:47:38.000000000 +0200
    @@ -383,7 +383,7 @@ struct carm_array_info {
     
     static int carm_init_one (struct pci_dev *pdev, const struct pci_device_id *ent);
     static void carm_remove_one (struct pci_dev *pdev);
    -static int carm_bdev_ioctl(struct inode *ino, struct file *fil,
    +static int carm_bdev_ioctl(struct block_device *bdev, struct file *fil,
     			   unsigned int cmd, unsigned long arg);
     
     static struct pci_device_id carm_pci_tbl[] = {
    @@ -410,11 +410,11 @@ static unsigned long carm_major_alloc;
     
     
     
    -static int carm_bdev_ioctl(struct inode *ino, struct file *fil,
    +static int carm_bdev_ioctl(struct block_device *bdev, struct file *fil,
     			   unsigned int cmd, unsigned long arg)
     {
     	void __user *usermem = (void __user *) arg;
    -	struct carm_port *port = ino->i_bdev->bd_disk->private_data;
    +	struct carm_port *port = bdev->bd_disk->private_data;
     	struct hd_geometry geom;
     
     	switch (cmd) {
    @@ -425,7 +425,7 @@ static int carm_bdev_ioctl(struct inode 
     		geom.heads = (u8) port->dev_geom_head;
     		geom.sectors = (u8) port->dev_geom_sect;
     		geom.cylinders = port->dev_geom_cyl;
    -		geom.start = get_start_sect(ino->i_bdev);
    +		geom.start = get_start_sect(bdev);
     
     		if (copy_to_user(usermem, &geom, sizeof(geom)))
     			return -EFAULT;
    diff -puN drivers/block/ub.c~blkdev_ioctl_use_bdev drivers/block/ub.c
    --- linux/drivers/block/ub.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/ub.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1576,10 +1576,10 @@ static int ub_bd_release(struct inode *i
     /*
      * The ioctl interface.
      */
    -static int ub_bd_ioctl(struct inode *inode, struct file *filp,
    +static int ub_bd_ioctl(struct block_device *bdev, struct file *filp,
         unsigned int cmd, unsigned long arg)
     {
    -	struct gendisk *disk = inode->i_bdev->bd_disk;
    +	struct gendisk *disk = bdev->bd_disk;
     	void __user *usermem = (void __user *) arg;
     
     	return scsi_cmd_ioctl(filp, disk, cmd, usermem);
    diff -puN drivers/block/umem.c~blkdev_ioctl_use_bdev drivers/block/umem.c
    --- linux/drivers/block/umem.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/umem.c	2005-05-22 12:47:38.000000000 +0200
    @@ -817,10 +817,10 @@ static int mm_revalidate(struct gendisk 
     --                            mm_ioctl
     -----------------------------------------------------------------------------------
     */
    -static int mm_ioctl(struct inode *i, struct file *f, unsigned int cmd, unsigned long arg)
    +static int mm_ioctl(struct block_device *bdev, struct file *f, unsigned int cmd, unsigned long arg)
     {
     	if (cmd == HDIO_GETGEO) {
    -		struct cardinfo *card = i->i_bdev->bd_disk->private_data;
    +		struct cardinfo *card = bdev->bd_disk->private_data;
     		int size = card->mm_size * (1024 / MM_HARDSECT);
     		struct hd_geometry geo;
     		/*
    @@ -830,7 +830,7 @@ static int mm_ioctl(struct inode *i, str
     		 */
     		geo.heads     = 64;
     		geo.sectors   = 32;
    -		geo.start     = get_start_sect(i->i_bdev);
    +		geo.start     = get_start_sect(bdev);
     		geo.cylinders = size / (geo.heads * geo.sectors);
     
     		if (copy_to_user((void __user *) arg, &geo, sizeof(geo)))
    diff -puN drivers/block/viodasd.c~blkdev_ioctl_use_bdev drivers/block/viodasd.c
    --- linux/drivers/block/viodasd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/viodasd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -247,7 +247,7 @@ static int viodasd_release(struct inode 
     
     /* External ioctl entry point.
      */
    -static int viodasd_ioctl(struct inode *ino, struct file *fil,
    +static int viodasd_ioctl(struct block_device *bdev, struct file *fil,
     			 unsigned int cmd, unsigned long arg)
     {
     	unsigned char sectors;
    @@ -264,7 +264,7 @@ static int viodasd_ioctl(struct inode *i
     			return -EINVAL;
     		if (!access_ok(VERIFY_WRITE, geo, sizeof(*geo)))
     			return -EFAULT;
    -		gendisk = ino->i_bdev->bd_disk;
    +		gendisk = bdev->bd_disk;
     		d = gendisk->private_data;
     		sectors = d->sectors;
     		if (sectors == 0)
    @@ -278,7 +278,7 @@ static int viodasd_ioctl(struct inode *i
     		if (__put_user(sectors, &geo->sectors) ||
     		    __put_user(heads, &geo->heads) ||
     		    __put_user(cylinders, &geo->cylinders) ||
    -		    __put_user(get_start_sect(ino->i_bdev), &geo->start))
    +		    __put_user(get_start_sect(bdev), &geo->start))
     			return -EFAULT;
     		return 0;
     	}
    diff -puN drivers/block/xd.c~blkdev_ioctl_use_bdev drivers/block/xd.c
    --- linux/drivers/block/xd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/xd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -330,9 +330,9 @@ static void do_xd_request (request_queue
     }
     
     /* xd_ioctl: handle device ioctl's */
    -static int xd_ioctl (struct inode *inode,struct file *file,u_int cmd,u_long arg)
    +static int xd_ioctl (struct block_device *bdev,struct file *file,u_int cmd,u_long arg)
     {
    -	XD_INFO *p = inode->i_bdev->bd_disk->private_data;
    +	XD_INFO *p = bdev->bd_disk->private_data;
     
     	switch (cmd) {
     		case HDIO_GETGEO:
    @@ -342,7 +342,7 @@ static int xd_ioctl (struct inode *inode
     			g.heads = p->heads;
     			g.sectors = p->sectors;
     			g.cylinders = p->cylinders;
    -			g.start = get_start_sect(inode->i_bdev);
    +			g.start = get_start_sect(bdev);
     			return copy_to_user(geom, &g, sizeof(g)) ? -EFAULT : 0;
     		}
     		case HDIO_SET_DMA:
    diff -puN drivers/block/xd.h~blkdev_ioctl_use_bdev drivers/block/xd.h
    --- linux/drivers/block/xd.h~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/block/xd.h	2005-05-22 12:47:38.000000000 +0200
    @@ -105,7 +105,7 @@ static u_char xd_detect (u_char *control
     static u_char xd_initdrives (void (*init_drive)(u_char drive));
     
     static void do_xd_request (request_queue_t * q);
    -static int xd_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg);
    +static int xd_ioctl (struct block_device *bdev,struct file *file,unsigned int cmd,unsigned long arg);
     static int xd_readwrite (u_char operation,XD_INFO *disk,char *buffer,u_int block,u_int count);
     static void xd_recalibrate (u_char drive);
     
    diff -puN drivers/cdrom/aztcd.c~blkdev_ioctl_use_bdev drivers/cdrom/aztcd.c
    --- linux/drivers/cdrom/aztcd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/aztcd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -329,7 +329,7 @@ static int aztGetToc(int multi);
     
     /* Kernel Interface Functions */
     static int check_aztcd_media_change(struct gendisk *disk);
    -static int aztcd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
    +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_release(struct inode *inode, struct file *file);
    @@ -1154,7 +1154,7 @@ static int check_aztcd_media_change(stru
     /*
      * Kernel IO-controls
     */
    -static int aztcd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
    +static int aztcd_ioctl(struct block_device *bdev, struct file *fp, unsigned int cmd,
     		       unsigned long arg)
     {
     	int i;
    @@ -1173,8 +1173,6 @@ static int aztcd_ioctl(struct inode *ip,
     	       cmd, jiffies);
     	printk("aztcd Status %x\n", getAztStatus());
     #endif
    -	if (!ip)
    -		RETURNM("aztcd_ioctl 1", -EINVAL);
     	if (getAztStatus() < 0)
     		RETURNM("aztcd_ioctl 2", -EIO);
     	if ((!aztTocUpToDate) || (aztDiskChanged)) {
    diff -puN drivers/cdrom/cdu31a.c~blkdev_ioctl_use_bdev drivers/cdrom/cdu31a.c
    --- linux/drivers/cdrom/cdu31a.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/cdu31a.c	2005-05-22 12:47:38.000000000 +0200
    @@ -2919,7 +2919,7 @@ static int scd_block_release(struct inod
     	return cdrom_release(&scd_info, file);
     }
     
    -static int scd_block_ioctl(struct inode *inode, struct file *file,
    +static int scd_block_ioctl(struct block_device *bdev, struct file *file,
     				unsigned cmd, unsigned long arg)
     {
     	int retval;
    @@ -2937,7 +2937,7 @@ static int scd_block_ioctl(struct inode 
     			retval = scd_tray_move(&scd_info, 0);
     			break;
     		default:
    -			retval = cdrom_ioctl(file, &scd_info, inode->i_bdev, cmd, arg);
    +			retval = cdrom_ioctl(file, &scd_info, bdev, cmd, arg);
     	}
     	return retval;
     }
    diff -puN drivers/cdrom/cm206.c~blkdev_ioctl_use_bdev drivers/cdrom/cm206.c
    --- linux/drivers/cdrom/cm206.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/cm206.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1360,10 +1360,10 @@ static int cm206_block_release(struct in
     	return cdrom_release(&cm206_info, file);
     }
     
    -static int cm206_block_ioctl(struct inode *inode, struct file *file,
    +static int cm206_block_ioctl(struct block_device *bdev, struct file *file,
     				unsigned cmd, unsigned long arg)
     {
    -	return cdrom_ioctl(file, &cm206_info, inode->i_bdev, cmd, arg);
    +	return cdrom_ioctl(file, &cm206_info, bdev, cmd, arg);
     }
     
     static int cm206_block_media_changed(struct gendisk *disk)
    diff -puN drivers/cdrom/gscd.c~blkdev_ioctl_use_bdev drivers/cdrom/gscd.c
    --- linux/drivers/cdrom/gscd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/gscd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -90,7 +90,7 @@ static void gscd_bin2bcd(unsigned char *
     /* Schnittstellen zum Kern/FS */
     
     static void __do_gscd_request(unsigned long dummy);
    -static int gscd_ioctl(struct inode *, struct file *, unsigned int,
    +static int gscd_ioctl(struct block_device *, struct file *, unsigned int,
     		      unsigned long);
     static int gscd_open(struct inode *, struct file *);
     static int gscd_release(struct inode *, struct file *);
    @@ -189,7 +189,7 @@ __setup("gscd=", gscd_setup);
     
     #endif
     
    -static int gscd_ioctl(struct inode *ip, struct file *fp, unsigned int cmd,
    +static int gscd_ioctl(struct block_device *bdev, struct file *fp, unsigned int cmd,
     		      unsigned long arg)
     {
     	unsigned char to_do[10];
    diff -puN drivers/cdrom/mcdx.c~blkdev_ioctl_use_bdev drivers/cdrom/mcdx.c
    --- linux/drivers/cdrom/mcdx.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/mcdx.c	2005-05-22 12:47:38.000000000 +0200
    @@ -224,11 +224,11 @@ static int mcdx_block_release(struct ino
     	return cdrom_release(&p->info, file);
     }
     
    -static int mcdx_block_ioctl(struct inode *inode, struct file *file,
    +static int mcdx_block_ioctl(struct block_device *bdev, struct file *file,
     				unsigned cmd, unsigned long arg)
     {
    -	struct s_drive_stuff *p = inode->i_bdev->bd_disk->private_data;
    -	return cdrom_ioctl(file, &p->info, inode->i_bdev, cmd, arg);
    +	struct s_drive_stuff *p = bdev->bd_disk->private_data;
    +	return cdrom_ioctl(file, &p->info, bdev, cmd, arg);
     }
     
     static int mcdx_block_media_changed(struct gendisk *disk)
    diff -puN drivers/cdrom/optcd.c~blkdev_ioctl_use_bdev drivers/cdrom/optcd.c
    --- linux/drivers/cdrom/optcd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/optcd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1713,7 +1713,7 @@ static int cdromreset(void)
     /* VFS calls */
     
     
    -static int opt_ioctl(struct inode *ip, struct file *fp,
    +static int opt_ioctl(struct block_device *bdev, struct file *fp,
                          unsigned int cmd, unsigned long arg)
     {
     	int status, err, retval = 0;
    @@ -1721,9 +1721,6 @@ static int opt_ioctl(struct inode *ip, s
     
     	DEBUG((DEBUG_VFS, "starting opt_ioctl"));
     
    -	if (!ip)
    -		return -EINVAL;
    -
     	if (cmd == CDROMRESET)
     		return cdromreset();
     
    diff -puN drivers/cdrom/sbpcd.c~blkdev_ioctl_use_bdev drivers/cdrom/sbpcd.c
    --- linux/drivers/cdrom/sbpcd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/sbpcd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -5369,11 +5369,11 @@ static int sbpcd_block_release(struct in
     	return cdrom_release(p->sbpcd_infop, file);
     }
     
    -static int sbpcd_block_ioctl(struct inode *inode, struct file *file,
    +static int sbpcd_block_ioctl(struct block_device *bdev, struct file *file,
     				unsigned cmd, unsigned long arg)
     {
    -	struct sbpcd_drive *p = inode->i_bdev->bd_disk->private_data;
    -	return cdrom_ioctl(file, p->sbpcd_infop, inode->i_bdev, cmd, arg);
    +	struct sbpcd_drive *p = bdev->bd_disk->private_data;
    +	return cdrom_ioctl(file, p->sbpcd_infop, bdev, cmd, arg);
     }
     
     static int sbpcd_block_media_changed(struct gendisk *disk)
    diff -puN drivers/cdrom/sjcd.c~blkdev_ioctl_use_bdev drivers/cdrom/sjcd.c
    --- linux/drivers/cdrom/sjcd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/sjcd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -713,7 +713,7 @@ static int sjcd_tray_open(void)
     /*
      * Do some user commands.
      */
    -static int sjcd_ioctl(struct inode *ip, struct file *fp,
    +static int sjcd_ioctl(struct block_device *bdev, struct file *fp,
     		      unsigned int cmd, unsigned long arg)
     {
     	void __user *argp = (void __user *)arg;
    diff -puN drivers/cdrom/sonycd535.c~blkdev_ioctl_use_bdev drivers/cdrom/sonycd535.c
    --- linux/drivers/cdrom/sonycd535.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/sonycd535.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1061,7 +1061,7 @@ sony_get_subchnl_info(void __user *arg)
      * The big ugly ioctl handler.
      */
     static int
    -cdu_ioctl(struct inode *inode,
    +cdu_ioctl(struct block_device *bdev,
     		  struct file *file,
     		  unsigned int cmd,
     		  unsigned long arg)
    diff -puN drivers/cdrom/viocd.c~blkdev_ioctl_use_bdev drivers/cdrom/viocd.c
    --- linux/drivers/cdrom/viocd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/cdrom/viocd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -197,11 +197,11 @@ static int viocd_blk_release(struct inod
     	return cdrom_release(&di->viocd_info, file);
     }
     
    -static int viocd_blk_ioctl(struct inode *inode, struct file *file,
    +static int viocd_blk_ioctl(struct block_device *bdev, struct file *file,
     		unsigned cmd, unsigned long arg)
     {
    -	struct disk_info *di = inode->i_bdev->bd_disk->private_data;
    -	return cdrom_ioctl(file, &di->viocd_info, inode->i_bdev, cmd, arg);
    +	struct disk_info *di = bdev->bd_disk->private_data;
    +	return cdrom_ioctl(file, &di->viocd_info, bdev, cmd, arg);
     }
     
     static int viocd_blk_media_changed(struct gendisk *disk)
    diff -puN drivers/char/raw.c~blkdev_ioctl_use_bdev drivers/char/raw.c
    --- linux/drivers/char/raw.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/char/raw.c	2005-05-22 12:47:38.000000000 +0200
    @@ -122,7 +122,7 @@ raw_ioctl(struct inode *inode, struct fi
     {
     	struct block_device *bdev = filp->private_data;
     
    -	return blkdev_ioctl(bdev->bd_inode, NULL, command, arg);
    +	return blkdev_ioctl(bdev, NULL, command, arg);
     }
     
     static void bind_device(struct raw_config_request *rq)
    diff -puN drivers/ide/ide-cd.c~blkdev_ioctl_use_bdev drivers/ide/ide-cd.c
    --- linux/drivers/ide/ide-cd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/ide/ide-cd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -3375,16 +3375,15 @@ static int idecd_release(struct inode * 
     	return 0;
     }
     
    -static int idecd_ioctl (struct inode *inode, struct file *file,
    +static int idecd_ioctl (struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct cdrom_info *info = ide_cd_g(bdev->bd_disk);
     	int err;
     
     	err  = generic_ide_ioctl(info->drive, file, bdev, cmd, arg);
     	if (err == -EINVAL)
    -		err = cdrom_ioctl(file, &info->devinfo, inode->i_bdev, cmd, arg);
    +		err = cdrom_ioctl(file, &info->devinfo, bdev, cmd, arg);
     
     	return err;
     }
    diff -puN drivers/ide/ide-disk.c~blkdev_ioctl_use_bdev drivers/ide/ide-disk.c
    --- linux/drivers/ide/ide-disk.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/ide/ide-disk.c	2005-05-22 12:47:38.000000000 +0200
    @@ -1159,10 +1159,9 @@ static int idedisk_release(struct inode 
     	return 0;
     }
     
    -static int idedisk_ioctl(struct inode *inode, struct file *file,
    +static int idedisk_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
     	return generic_ide_ioctl(idkp->drive, file, bdev, cmd, arg);
     }
    diff -puN drivers/ide/ide-floppy.c~blkdev_ioctl_use_bdev drivers/ide/ide-floppy.c
    --- linux/drivers/ide/ide-floppy.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/ide/ide-floppy.c	2005-05-22 12:47:38.000000000 +0200
    @@ -2027,10 +2027,9 @@ static int idefloppy_release(struct inod
     	return 0;
     }
     
    -static int idefloppy_ioctl(struct inode *inode, struct file *file,
    +static int idefloppy_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct ide_floppy_obj *floppy = ide_floppy_g(bdev->bd_disk);
     	ide_drive_t *drive = floppy->drive;
     	void __user *argp = (void __user *)arg;
    diff -puN drivers/ide/ide-tape.c~blkdev_ioctl_use_bdev drivers/ide/ide-tape.c
    --- linux/drivers/ide/ide-tape.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/ide/ide-tape.c	2005-05-22 12:47:38.000000000 +0200
    @@ -4810,10 +4810,9 @@ static int idetape_release(struct inode 
     	return 0;
     }
     
    -static int idetape_ioctl(struct inode *inode, struct file *file,
    +static int idetape_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct ide_tape_obj *tape = ide_tape_g(bdev->bd_disk);
     	ide_drive_t *drive = tape->drive;
     	int err = generic_ide_ioctl(drive, file, bdev, cmd, arg);
    diff -puN drivers/ide/legacy/hd.c~blkdev_ioctl_use_bdev drivers/ide/legacy/hd.c
    --- linux/drivers/ide/legacy/hd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/ide/legacy/hd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -656,10 +656,10 @@ static void do_hd_request (request_queue
     	enable_irq(HD_IRQ);
     }
     
    -static int hd_ioctl(struct inode * inode, struct file * file,
    +static int hd_ioctl(struct block_device * bdev, struct file * file,
     	unsigned int cmd, unsigned long arg)
     {
    -	struct hd_i_struct *disk = inode->i_bdev->bd_disk->private_data;
    +	struct hd_i_struct *disk = bdev->bd_disk->private_data;
     	struct hd_geometry __user *loc = (struct hd_geometry __user *) arg;
     	struct hd_geometry g; 
     
    @@ -670,7 +670,7 @@ static int hd_ioctl(struct inode * inode
     	g.heads = disk->head;
     	g.sectors = disk->sect;
     	g.cylinders = disk->cyl;
    -	g.start = get_start_sect(inode->i_bdev);
    +	g.start = get_start_sect(bdev);
     	return copy_to_user(loc, &g, sizeof g) ? -EFAULT : 0; 
     }
     
    diff -puN drivers/md/md.c~blkdev_ioctl_use_bdev drivers/md/md.c
    --- linux/drivers/md/md.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/md/md.c	2005-05-22 12:47:38.000000000 +0200
    @@ -2443,7 +2443,7 @@ static int set_disk_faulty(mddev_t *mdde
     	return 0;
     }
     
    -static int md_ioctl(struct inode *inode, struct file *file,
    +static int md_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
     	int err = 0;
    @@ -2482,7 +2482,7 @@ static int md_ioctl(struct inode *inode,
     	 * Commands creating/starting a new array:
     	 */
     
    -	mddev = inode->i_bdev->bd_disk->private_data;
    +	mddev = bdev->bd_disk->private_data;
     
     	if (!mddev) {
     		BUG();
    @@ -2619,7 +2619,7 @@ static int md_ioctl(struct inode *inode,
     					(short __user *) &loc->cylinders);
     			if (err)
     				goto abort_unlock;
    -			err = put_user (get_start_sect(inode->i_bdev),
    +			err = put_user (get_start_sect(bdev),
     						(long __user *) &loc->start);
     			goto done_unlock;
     	}
    diff -puN drivers/message/i2o/i2o_block.c~blkdev_ioctl_use_bdev drivers/message/i2o/i2o_block.c
    --- linux/drivers/message/i2o/i2o_block.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/message/i2o/i2o_block.c	2005-05-22 12:47:38.000000000 +0200
    @@ -703,10 +703,10 @@ static int i2o_block_release(struct inod
      *
      *	Return 0 on success or negative error on failure.
      */
    -static int i2o_block_ioctl(struct inode *inode, struct file *file,
    +static int i2o_block_ioctl(struct block_device *bdev, struct file *file,
     			   unsigned int cmd, unsigned long arg)
     {
    -	struct gendisk *disk = inode->i_bdev->bd_disk;
    +	struct gendisk *disk = bdev->bd_disk;
     	struct i2o_block_device *dev = disk->private_data;
     	void __user *argp = (void __user *)arg;
     
    @@ -721,7 +721,7 @@ static int i2o_block_ioctl(struct inode 
     			struct hd_geometry g;
     			i2o_block_biosparam(get_capacity(disk),
     					    &g.cylinders, &g.heads, &g.sectors);
    -			g.start = get_start_sect(inode->i_bdev);
    +			g.start = get_start_sect(bdev);
     			return copy_to_user(argp, &g, sizeof(g)) ? -EFAULT : 0;
     		}
     
    diff -puN drivers/mmc/mmc_block.c~blkdev_ioctl_use_bdev drivers/mmc/mmc_block.c
    --- linux/drivers/mmc/mmc_block.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/mmc/mmc_block.c	2005-05-22 12:47:38.000000000 +0200
    @@ -109,10 +109,8 @@ static int mmc_blk_release(struct inode 
     }
     
     static int
    -mmc_blk_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
    +mmc_blk_ioctl(struct block_device *bdev, struct file *filp, unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
    -
     	if (cmd == HDIO_GETGEO) {
     		struct hd_geometry geo;
     
    diff -puN drivers/mtd/mtd_blkdevs.c~blkdev_ioctl_use_bdev drivers/mtd/mtd_blkdevs.c
    --- linux/drivers/mtd/mtd_blkdevs.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/mtd/mtd_blkdevs.c	2005-05-22 12:47:38.000000000 +0200
    @@ -196,10 +196,10 @@ static int blktrans_release(struct inode
     }
     
     
    -static int blktrans_ioctl(struct inode *inode, struct file *file, 
    +static int blktrans_ioctl(struct block_device *bdev, struct file *file,
     			      unsigned int cmd, unsigned long arg)
     {
    -	struct mtd_blktrans_dev *dev = inode->i_bdev->bd_disk->private_data;
    +	struct mtd_blktrans_dev *dev = bdev->bd_disk->private_data;
     	struct mtd_blktrans_ops *tr = dev->tr;
     
     	switch (cmd) {
    @@ -219,7 +219,7 @@ static int blktrans_ioctl(struct inode *
     			if (ret)
     				return ret;
     
    -			g.start = get_start_sect(inode->i_bdev);
    +			g.start = get_start_sect(bdev);
     			if (copy_to_user((void __user *)arg, &g, sizeof(g)))
     				return -EFAULT;
     			return 0;
    diff -puN drivers/s390/block/dasd_int.h~blkdev_ioctl_use_bdev drivers/s390/block/dasd_int.h
    --- linux/drivers/s390/block/dasd_int.h~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/s390/block/dasd_int.h	2005-05-22 12:47:38.000000000 +0200
    @@ -524,7 +524,7 @@ int  dasd_ioctl_init(void);
     void dasd_ioctl_exit(void);
     int  dasd_ioctl_no_register(struct module *, int, dasd_ioctl_fn_t);
     int  dasd_ioctl_no_unregister(struct module *, int, dasd_ioctl_fn_t);
    -int  dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
    +int  dasd_ioctl(struct block_device *, struct file *, unsigned int, unsigned long);
     
     /* externals in dasd_proc.c */
     int dasd_proc_init(void);
    diff -puN drivers/s390/block/dasd_ioctl.c~blkdev_ioctl_use_bdev drivers/s390/block/dasd_ioctl.c
    --- linux/drivers/s390/block/dasd_ioctl.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/s390/block/dasd_ioctl.c	2005-05-22 12:47:38.000000000 +0200
    @@ -80,10 +80,10 @@ dasd_ioctl_no_unregister(struct module *
     }
     
     int
    -dasd_ioctl(struct inode *inp, struct file *filp,
    +dasd_ioctl(struct block_device *bdev, struct file *filp,
     	   unsigned int no, unsigned long data)
     {
    -	struct block_device *bdev = inp->i_bdev;
    +	struct block_device *bdev = bdev;
     	struct dasd_device *device = bdev->bd_disk->private_data;
     	struct dasd_ioctl *ioctl;
     	const char *dir;
    diff -puN drivers/s390/block/xpram.c~blkdev_ioctl_use_bdev drivers/s390/block/xpram.c
    --- linux/drivers/s390/block/xpram.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/s390/block/xpram.c	2005-05-22 12:47:38.000000000 +0200
    @@ -328,7 +328,7 @@ fail:
     	return 0;
     }
     
    -static int xpram_ioctl (struct inode *inode, struct file *filp,
    +static int xpram_ioctl (struct block_device *bdev, struct file *filp,
     		 unsigned int cmd, unsigned long arg)
     {
     	struct hd_geometry __user *geo;
    diff -puN drivers/s390/char/tape_block.c~blkdev_ioctl_use_bdev drivers/s390/char/tape_block.c
    --- linux/drivers/s390/char/tape_block.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/s390/char/tape_block.c	2005-05-22 12:47:38.000000000 +0200
    @@ -45,7 +45,7 @@
      */
     static int tapeblock_open(struct inode *, struct file *);
     static int tapeblock_release(struct inode *, struct file *);
    -static int tapeblock_ioctl(struct inode *, struct file *, unsigned int,
    +static int tapeblock_ioctl(struct block_device *, struct file *, unsigned int,
     				unsigned long);
     static int tapeblock_medium_changed(struct gendisk *);
     static int tapeblock_revalidate_disk(struct gendisk *);
    @@ -428,24 +428,24 @@ tapeblock_release(struct inode *inode, s
      */
     static int
     tapeblock_ioctl(
    -	struct inode *		inode,
    +	struct block_device *	bdev,
     	struct file *		file,
     	unsigned int		command,
     	unsigned long		arg
     ) {
     	int rc;
     	int minor;
    -	struct gendisk *disk = inode->i_bdev->bd_disk;
    +	struct gendisk *disk = bdev->bd_disk;
     	struct tape_device *device = disk->private_data;
     
     	rc     = 0;
    -	disk   = inode->i_bdev->bd_disk;
    +	disk   = bdev->bd_disk;
     	if (!disk)
     		BUG();
     	device = disk->private_data;
     	if (!device)
     		BUG();
    -	minor  = iminor(inode);
    +	minor  = iminor(bdev->bd_inode);
     
     	DBF_LH(6, "tapeblock_ioctl(0x%0x)\n", command);
     	DBF_LH(6, "device = %d:%d\n", tapeblock_major, minor);
    diff -puN drivers/scsi/ide-scsi.c~blkdev_ioctl_use_bdev drivers/scsi/ide-scsi.c
    --- linux/drivers/scsi/ide-scsi.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/scsi/ide-scsi.c	2005-05-22 12:47:38.000000000 +0200
    @@ -806,10 +806,9 @@ static int idescsi_ide_release(struct in
     	return 0;
     }
     
    -static int idescsi_ide_ioctl(struct inode *inode, struct file *file,
    +static int idescsi_ide_ioctl(struct block_device *bdev, struct file *file,
     			unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct ide_scsi_obj *scsi = ide_scsi_g(bdev->bd_disk);
     	return generic_ide_ioctl(scsi->drive, file, bdev, cmd, arg);
     }
    diff -puN drivers/scsi/sd.c~blkdev_ioctl_use_bdev drivers/scsi/sd.c
    --- linux/drivers/scsi/sd.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/scsi/sd.c	2005-05-22 12:47:38.000000000 +0200
    @@ -563,10 +563,9 @@ static int sd_hdio_getgeo(struct block_d
      *	Note: most ioctls are forward onto the block subsystem or further
      *	down in the scsi subsytem.
      **/
    -static int sd_ioctl(struct inode * inode, struct file * filp, 
    +static int sd_ioctl(struct block_device * bdev, struct file * filp,
     		    unsigned int cmd, unsigned long arg)
     {
    -	struct block_device *bdev = inode->i_bdev;
     	struct gendisk *disk = bdev->bd_disk;
     	struct scsi_device *sdp = scsi_disk(disk)->device;
     	void __user *p = (void __user *)arg;
    diff -puN drivers/scsi/sr.c~blkdev_ioctl_use_bdev drivers/scsi/sr.c
    --- linux/drivers/scsi/sr.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/drivers/scsi/sr.c	2005-05-22 12:47:38.000000000 +0200
    @@ -487,10 +487,10 @@ static int sr_block_release(struct inode
     	return 0;
     }
     
    -static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
    +static int sr_block_ioctl(struct block_device *bdev, struct file *file, unsigned cmd,
     			  unsigned long arg)
     {
    -	struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk);
    +	struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
     	struct scsi_device *sdev = cd->device;
     
             /*
    @@ -502,7 +502,7 @@ static int sr_block_ioctl(struct inode *
                     case SCSI_IOCTL_GET_BUS_NUMBER:
                             return scsi_ioctl(sdev, cmd, (void __user *)arg);
     	}
    -	return cdrom_ioctl(file, &cd->cdi, inode->i_bdev, cmd, arg);
    +	return cdrom_ioctl(file, &cd->cdi, bdev, cmd, arg);
     }
     
     static int sr_block_media_changed(struct gendisk *disk)
    diff -puN fs/block_dev.c~blkdev_ioctl_use_bdev fs/block_dev.c
    --- linux/fs/block_dev.c~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/fs/block_dev.c	2005-05-22 12:47:38.000000000 +0200
    @@ -780,7 +780,7 @@ static ssize_t blkdev_file_aio_write(str
     static int block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
     			unsigned long arg)
     {
    -	return blkdev_ioctl(file->f_mapping->host, file, cmd, arg);
    +	return blkdev_ioctl(file->f_mapping->host->i_bdev, file, cmd, arg);
     }
     
     struct address_space_operations def_blk_aops = {
    @@ -817,7 +817,7 @@ int ioctl_by_bdev(struct block_device *b
     	int res;
     	mm_segment_t old_fs = get_fs();
     	set_fs(KERNEL_DS);
    -	res = blkdev_ioctl(bdev->bd_inode, NULL, cmd, arg);
    +	res = blkdev_ioctl(bdev, NULL, cmd, arg);
     	set_fs(old_fs);
     	return res;
     }
    diff -puN include/linux/fs.h~blkdev_ioctl_use_bdev include/linux/fs.h
    --- linux/include/linux/fs.h~blkdev_ioctl_use_bdev	2005-05-22 12:47:38.000000000 +0200
    +++ linux-petero/include/linux/fs.h	2005-05-22 12:47:38.000000000 +0200
    @@ -882,7 +882,7 @@ typedef int (*filldir_t)(void *, const c
     struct block_device_operations {
     	int (*open) (struct inode *, struct file *);
     	int (*release) (struct inode *, struct file *);
    -	int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long);
    +	int (*ioctl) (struct block_device *, struct file *, unsigned, unsigned long);
     	long (*compat_ioctl) (struct file *, unsigned, unsigned long);
     	int (*media_changed) (struct gendisk *);
     	int (*revalidate_disk) (struct gendisk *);
    @@ -1290,7 +1290,7 @@ extern struct file_operations def_chr_fo
     extern struct file_operations bad_sock_fops;
     extern struct file_operations def_fifo_fops;
     extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
    -extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long);
    +extern int blkdev_ioctl(struct block_device *, struct file *, unsigned, unsigned long);
     extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
     extern int blkdev_get(struct block_device *, mode_t, unsigned);
     extern int blkdev_put(struct block_device *);
    _
    -- 
    Peter Osterlund - petero2@telia.com
    http://web.telia.com/~u89404340
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Yani Ioannou: "Re: [lm-sensors] [PATCH 2.6.12-rc4 15/15] drivers/i2c/chips/adm1026.c: use dynamic sysfs callbacks"

    Relevant Pages

    • [BK pull] DRM macro removal the end..
      ... * Frees each buffer associated with \p filp not already on the hardware. ... +void DRM(struct file *filp) ... -int DRM(struct inode *inode, struct file *filp, ... +int ffb_driver_resctx(struct inode *inode, struct file *filp, unsigned int cmd, ...
      (Linux-Kernel)
    • Re: [PATCH 1/3] 2.6.8-rc4-mm1 - Fix UML build
      ... I'd also wouldn't mind breaking up the big UML patch into somewhat more sane ... -static int cow_open(struct inode *inode, ... -static int cow_release(struct inode * inode, struct file * file); ...
      (Linux-Kernel)
    • [PATCH] FUSE - Transfer readdir data through device
      ... -static int fuse_checkdir(struct file *cfile, ... +static int fuse_readdir ... static int fuse_dir_open(struct inode *inode, ...
      (Linux-Kernel)
    • tmpfs crashes without devfs support
      ... please explain me the connection between tmpfs and devfs. ... int hpi_open(struct inode *inode, struct file *file); ... int hpi_release(struct inode *inode, struct file *file); ...
      (Linux-Kernel)
    • Implement compat_ioctl for joydev
      ... Patch against stock 2.6.11, ... -static int joydev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) ...
      (Linux-Kernel)