Commit 40cc51be699e37b78102ce7b2196ec9c32fe1908
1 parent
0338e29178
Exists in
master
and in
7 other branches
[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
drivers/scsi/sr.c
... | ... | @@ -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 |