lkml.org 
[lkml]   [2005]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: [PATCH] Fix root hole in raw device
From
Date
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/

\
 
 \ /
  Last update: 2005-05-22 14:09    [W:0.078 / U:1.016 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site