@@ -471,34 +471,31 @@ static int sr_prep_fn(struct request_queue *q, struct request *rq)
471471 return scsi_prep_return (q , rq , ret );
472472}
473473
474- static int sr_block_open (struct inode * inode , struct file * file )
474+ static int sr_block_open (struct block_device * bdev , fmode_t mode )
475475{
476- struct gendisk * disk = inode -> i_bdev -> bd_disk ;
477- struct scsi_cd * cd ;
478- int ret = 0 ;
479-
480- if (!(cd = scsi_cd_get (disk )))
481- return - ENXIO ;
482-
483- if ((ret = cdrom_open (& cd -> cdi , inode -> i_bdev , file -> f_mode )) != 0 )
484- scsi_cd_put (cd );
476+ struct scsi_cd * cd = scsi_cd_get (bdev -> bd_disk );
477+ int ret = - ENXIO ;
485478
479+ if (cd ) {
480+ ret = cdrom_open (& cd -> cdi , bdev , mode );
481+ if (ret )
482+ scsi_cd_put (cd );
483+ }
486484 return ret ;
487485}
488486
489- static int sr_block_release (struct inode * inode , struct file * file )
487+ static int sr_block_release (struct gendisk * disk , fmode_t mode )
490488{
491- struct scsi_cd * cd = scsi_cd (inode -> i_bdev -> bd_disk );
492- cdrom_release (& cd -> cdi , file ? file -> f_mode : 0 );
489+ struct scsi_cd * cd = scsi_cd (disk );
490+ cdrom_release (& cd -> cdi , mode );
493491 scsi_cd_put (cd );
494-
495492 return 0 ;
496493}
497494
498- static int sr_block_ioctl (struct inode * inode , struct file * file , unsigned cmd ,
495+ static int sr_block_ioctl (struct block_device * bdev , fmode_t mode , unsigned cmd ,
499496 unsigned long arg )
500497{
501- struct scsi_cd * cd = scsi_cd (inode -> i_bdev -> bd_disk );
498+ struct scsi_cd * cd = scsi_cd (bdev -> bd_disk );
502499 struct scsi_device * sdev = cd -> device ;
503500 void __user * argp = (void __user * )arg ;
504501 int ret ;
@@ -513,8 +510,7 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
513510 return scsi_ioctl (sdev , cmd , argp );
514511 }
515512
516- ret = cdrom_ioctl (& cd -> cdi , inode -> i_bdev ,
517- file ? file -> f_mode : 0 , cmd , arg );
513+ ret = cdrom_ioctl (& cd -> cdi , bdev , mode , cmd , arg );
518514 if (ret != - ENOSYS )
519515 return ret ;
520516
@@ -525,7 +521,7 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd,
525521 * if it doesn't recognise the ioctl
526522 */
527523 ret = scsi_nonblockable_ioctl (sdev , cmd , argp ,
528- file ? file -> f_flags & O_NDELAY : 0 );
524+ ( mode & FMODE_NDELAY_NOW ) != 0 );
529525 if (ret != - ENODEV )
530526 return ret ;
531527 return scsi_ioctl (sdev , cmd , argp );
@@ -540,9 +536,9 @@ static int sr_block_media_changed(struct gendisk *disk)
540536static struct block_device_operations sr_bdops =
541537{
542538 .owner = THIS_MODULE ,
543- .__open = sr_block_open ,
544- .__release = sr_block_release ,
545- .__ioctl = sr_block_ioctl ,
539+ .open = sr_block_open ,
540+ .release = sr_block_release ,
541+ .locked_ioctl = sr_block_ioctl ,
546542 .media_changed = sr_block_media_changed ,
547543 /*
548544 * No compat_ioctl for now because sr_block_ioctl never
0 commit comments