Commit 40cc51be699e37b78102ce7b2196ec9c32fe1908

Authored by Al Viro
1 parent 0338e29178

[PATCH] switch sr

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Showing 1 changed file with 18 additions and 22 deletions Side-by-side Diff

... ... @@ -471,34 +471,31 @@
471 471 return scsi_prep_return(q, rq, ret);
472 472 }
473 473  
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)
475 475 {
476   - struct gendisk *disk = inode->i_bdev->bd_disk;
477   - struct scsi_cd *cd;
478   - int ret = 0;
  476 + struct scsi_cd *cd = scsi_cd_get(bdev->bd_disk);
  477 + int ret = -ENXIO;
479 478  
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);
485   -
  479 + if (cd) {
  480 + ret = cdrom_open(&cd->cdi, bdev, mode);
  481 + if (ret)
  482 + scsi_cd_put(cd);
  483 + }
486 484 return ret;
487 485 }
488 486  
489   -static int sr_block_release(struct inode *inode, struct file *file)
  487 +static int sr_block_release(struct gendisk *disk, fmode_t mode)
490 488 {
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);
493 491 scsi_cd_put(cd);
494   -
495 492 return 0;
496 493 }
497 494  
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,
499 496 unsigned long arg)
500 497 {
501   - struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk);
  498 + struct scsi_cd *cd = scsi_cd(bdev->bd_disk);
502 499 struct scsi_device *sdev = cd->device;
503 500 void __user *argp = (void __user *)arg;
504 501 int ret;
... ... @@ -513,8 +510,7 @@
513 510 return scsi_ioctl(sdev, cmd, argp);
514 511 }
515 512  
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);
518 514 if (ret != -ENOSYS)
519 515 return ret;
520 516  
... ... @@ -525,7 +521,7 @@
525 521 * if it doesn't recognise the ioctl
526 522 */
527 523 ret = scsi_nonblockable_ioctl(sdev, cmd, argp,
528   - file ? file->f_flags & O_NDELAY : 0);
  524 + (mode & FMODE_NDELAY_NOW) != 0);
529 525 if (ret != -ENODEV)
530 526 return ret;
531 527 return scsi_ioctl(sdev, cmd, argp);
... ... @@ -540,9 +536,9 @@
540 536 static struct block_device_operations sr_bdops =
541 537 {
542 538 .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,
546 542 .media_changed = sr_block_media_changed,
547 543 /*
548 544 * No compat_ioctl for now because sr_block_ioctl never