diff options
| -rw-r--r-- | drivers/block/paride/pcd.c | 8 | ||||
| -rw-r--r-- | drivers/cdrom/cdrom.c | 23 | ||||
| -rw-r--r-- | drivers/cdrom/gdrom.c | 7 | ||||
| -rw-r--r-- | drivers/cdrom/viocd.c | 8 | ||||
| -rw-r--r-- | drivers/ide/ide-cd.c | 7 | ||||
| -rw-r--r-- | drivers/scsi/sr.c | 11 | ||||
| -rw-r--r-- | include/linux/cdrom.h | 10 |
7 files changed, 38 insertions, 36 deletions
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index b8a994a2b013..8bd557e2a659 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c | |||
| @@ -226,20 +226,22 @@ static int pcd_warned; /* Have we logged a phase warning ? */ | |||
| 226 | static int pcd_block_open(struct inode *inode, struct file *file) | 226 | static int pcd_block_open(struct inode *inode, struct file *file) |
| 227 | { | 227 | { |
| 228 | struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; | 228 | struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; |
| 229 | return cdrom_open(&cd->info, inode, file); | 229 | return cdrom_open(&cd->info, inode->i_bdev, file->f_mode); |
| 230 | } | 230 | } |
| 231 | 231 | ||
| 232 | static int pcd_block_release(struct inode *inode, struct file *file) | 232 | static int pcd_block_release(struct inode *inode, struct file *file) |
| 233 | { | 233 | { |
| 234 | struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; | 234 | struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; |
| 235 | return cdrom_release(&cd->info, file); | 235 | cdrom_release(&cd->info, file ? file->f_mode : 0); |
| 236 | return 0; | ||
| 236 | } | 237 | } |
| 237 | 238 | ||
| 238 | static int pcd_block_ioctl(struct inode *inode, struct file *file, | 239 | static int pcd_block_ioctl(struct inode *inode, struct file *file, |
| 239 | unsigned cmd, unsigned long arg) | 240 | unsigned cmd, unsigned long arg) |
| 240 | { | 241 | { |
| 241 | struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; | 242 | struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; |
| 242 | return cdrom_ioctl(file, &cd->info, inode, cmd, arg); | 243 | return cdrom_ioctl(&cd->info, inode->i_bdev, |
| 244 | file ? file->f_mode : 0, cmd, arg); | ||
| 243 | } | 245 | } |
| 244 | 246 | ||
| 245 | static int pcd_block_media_changed(struct gendisk *disk) | 247 | static int pcd_block_media_changed(struct gendisk *disk) |
diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index e286eb5d1f6a..d16b02423d61 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c | |||
| @@ -973,7 +973,7 @@ static int cdrom_close_write(struct cdrom_device_info *cdi) | |||
| 973 | * is in their own interest: device control becomes a lot easier | 973 | * is in their own interest: device control becomes a lot easier |
| 974 | * this way. | 974 | * this way. |
| 975 | */ | 975 | */ |
| 976 | int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, struct file *fp) | 976 | int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, fmode_t mode) |
| 977 | { | 977 | { |
| 978 | int ret; | 978 | int ret; |
| 979 | 979 | ||
| @@ -982,14 +982,14 @@ int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, struct file *fp) | |||
| 982 | /* if this was a O_NONBLOCK open and we should honor the flags, | 982 | /* if this was a O_NONBLOCK open and we should honor the flags, |
| 983 | * do a quick open without drive/disc integrity checks. */ | 983 | * do a quick open without drive/disc integrity checks. */ |
| 984 | cdi->use_count++; | 984 | cdi->use_count++; |
| 985 | if ((fp->f_mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) { | 985 | if ((mode & FMODE_NDELAY) && (cdi->options & CDO_USE_FFLAGS)) { |
| 986 | ret = cdi->ops->open(cdi, 1); | 986 | ret = cdi->ops->open(cdi, 1); |
| 987 | } else { | 987 | } else { |
| 988 | ret = open_for_data(cdi); | 988 | ret = open_for_data(cdi); |
| 989 | if (ret) | 989 | if (ret) |
| 990 | goto err; | 990 | goto err; |
| 991 | cdrom_mmc3_profile(cdi); | 991 | cdrom_mmc3_profile(cdi); |
| 992 | if (fp->f_mode & FMODE_WRITE) { | 992 | if (mode & FMODE_WRITE) { |
| 993 | ret = -EROFS; | 993 | ret = -EROFS; |
| 994 | if (cdrom_open_write(cdi)) | 994 | if (cdrom_open_write(cdi)) |
| 995 | goto err_release; | 995 | goto err_release; |
| @@ -1007,7 +1007,7 @@ int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, struct file *fp) | |||
| 1007 | cdi->name, cdi->use_count); | 1007 | cdi->name, cdi->use_count); |
| 1008 | /* Do this on open. Don't wait for mount, because they might | 1008 | /* Do this on open. Don't wait for mount, because they might |
| 1009 | not be mounting, but opening with O_NONBLOCK */ | 1009 | not be mounting, but opening with O_NONBLOCK */ |
| 1010 | check_disk_change(ip->i_bdev); | 1010 | check_disk_change(bdev); |
| 1011 | return 0; | 1011 | return 0; |
| 1012 | err_release: | 1012 | err_release: |
| 1013 | if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) { | 1013 | if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) { |
| @@ -1184,7 +1184,7 @@ static int check_for_audio_disc(struct cdrom_device_info * cdi, | |||
| 1184 | return 0; | 1184 | return 0; |
| 1185 | } | 1185 | } |
| 1186 | 1186 | ||
| 1187 | int cdrom_release(struct cdrom_device_info *cdi, struct file *fp) | 1187 | void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode) |
| 1188 | { | 1188 | { |
| 1189 | struct cdrom_device_ops *cdo = cdi->ops; | 1189 | struct cdrom_device_ops *cdo = cdi->ops; |
| 1190 | int opened_for_data; | 1190 | int opened_for_data; |
| @@ -1205,7 +1205,7 @@ int cdrom_release(struct cdrom_device_info *cdi, struct file *fp) | |||
| 1205 | } | 1205 | } |
| 1206 | 1206 | ||
| 1207 | opened_for_data = !(cdi->options & CDO_USE_FFLAGS) || | 1207 | opened_for_data = !(cdi->options & CDO_USE_FFLAGS) || |
| 1208 | !(fp && fp->f_mode & FMODE_NDELAY); | 1208 | !(mode & FMODE_NDELAY); |
| 1209 | 1209 | ||
| 1210 | /* | 1210 | /* |
| 1211 | * flush cache on last write release | 1211 | * flush cache on last write release |
| @@ -1219,7 +1219,6 @@ int cdrom_release(struct cdrom_device_info *cdi, struct file *fp) | |||
| 1219 | cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY)) | 1219 | cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY)) |
| 1220 | cdo->tray_move(cdi, 1); | 1220 | cdo->tray_move(cdi, 1); |
| 1221 | } | 1221 | } |
| 1222 | return 0; | ||
| 1223 | } | 1222 | } |
| 1224 | 1223 | ||
| 1225 | static int cdrom_read_mech_status(struct cdrom_device_info *cdi, | 1224 | static int cdrom_read_mech_status(struct cdrom_device_info *cdi, |
| @@ -2662,17 +2661,17 @@ static int cdrom_ioctl_audioctl(struct cdrom_device_info *cdi, | |||
| 2662 | * these days. | 2661 | * these days. |
| 2663 | * ATAPI / SCSI specific code now mainly resides in mmc_ioctl(). | 2662 | * ATAPI / SCSI specific code now mainly resides in mmc_ioctl(). |
| 2664 | */ | 2663 | */ |
| 2665 | int cdrom_ioctl(struct file * file, struct cdrom_device_info *cdi, | 2664 | int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, |
| 2666 | struct inode *ip, unsigned int cmd, unsigned long arg) | 2665 | fmode_t mode, unsigned int cmd, unsigned long arg) |
| 2667 | { | 2666 | { |
| 2668 | void __user *argp = (void __user *)arg; | 2667 | void __user *argp = (void __user *)arg; |
| 2669 | int ret; | 2668 | int ret; |
| 2670 | struct gendisk *disk = ip->i_bdev->bd_disk; | 2669 | struct gendisk *disk = bdev->bd_disk; |
| 2671 | 2670 | ||
| 2672 | /* | 2671 | /* |
| 2673 | * Try the generic SCSI command ioctl's first. | 2672 | * Try the generic SCSI command ioctl's first. |
| 2674 | */ | 2673 | */ |
| 2675 | ret = scsi_cmd_ioctl(disk->queue, disk, file ? file->f_mode : 0, cmd, argp); | 2674 | ret = scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); |
| 2676 | if (ret != -ENOTTY) | 2675 | if (ret != -ENOTTY) |
| 2677 | return ret; | 2676 | return ret; |
| 2678 | 2677 | ||
| @@ -2696,7 +2695,7 @@ int cdrom_ioctl(struct file * file, struct cdrom_device_info *cdi, | |||
| 2696 | case CDROM_SELECT_DISC: | 2695 | case CDROM_SELECT_DISC: |
| 2697 | return cdrom_ioctl_select_disc(cdi, arg); | 2696 | return cdrom_ioctl_select_disc(cdi, arg); |
| 2698 | case CDROMRESET: | 2697 | case CDROMRESET: |
| 2699 | return cdrom_ioctl_reset(cdi, ip->i_bdev); | 2698 | return cdrom_ioctl_reset(cdi, bdev); |
| 2700 | case CDROM_LOCKDOOR: | 2699 | case CDROM_LOCKDOOR: |
| 2701 | return cdrom_ioctl_lock_door(cdi, arg); | 2700 | return cdrom_ioctl_lock_door(cdi, arg); |
| 2702 | case CDROM_DEBUG: | 2701 | case CDROM_DEBUG: |
diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c index d6ba77a2dd7b..0959edf2afdb 100644 --- a/drivers/cdrom/gdrom.c +++ b/drivers/cdrom/gdrom.c | |||
| @@ -492,12 +492,12 @@ static struct cdrom_device_ops gdrom_ops = { | |||
| 492 | 492 | ||
| 493 | static int gdrom_bdops_open(struct inode *inode, struct file *file) | 493 | static int gdrom_bdops_open(struct inode *inode, struct file *file) |
| 494 | { | 494 | { |
| 495 | return cdrom_open(gd.cd_info, inode, file); | 495 | return cdrom_open(gd.cd_info, inode->i_bdev, file->f_mode); |
| 496 | } | 496 | } |
| 497 | 497 | ||
| 498 | static int gdrom_bdops_release(struct inode *inode, struct file *file) | 498 | static int gdrom_bdops_release(struct inode *inode, struct file *file) |
| 499 | { | 499 | { |
| 500 | return cdrom_release(gd.cd_info, file); | 500 | return cdrom_release(gd.cd_info, file ? file->f_mode : 0); |
| 501 | } | 501 | } |
| 502 | 502 | ||
| 503 | static int gdrom_bdops_mediachanged(struct gendisk *disk) | 503 | static int gdrom_bdops_mediachanged(struct gendisk *disk) |
| @@ -508,7 +508,8 @@ static int gdrom_bdops_mediachanged(struct gendisk *disk) | |||
| 508 | static int gdrom_bdops_ioctl(struct inode *inode, struct file *file, | 508 | static int gdrom_bdops_ioctl(struct inode *inode, struct file *file, |
| 509 | unsigned cmd, unsigned long arg) | 509 | unsigned cmd, unsigned long arg) |
| 510 | { | 510 | { |
| 511 | return cdrom_ioctl(file, gd.cd_info, inode, cmd, arg); | 511 | return cdrom_ioctl(gd.cd_info, inode->i_bdev, |
| 512 | file ? file->f_mode : 0, cmd, arg); | ||
| 512 | } | 513 | } |
| 513 | 514 | ||
| 514 | static struct block_device_operations gdrom_bdops = { | 515 | static struct block_device_operations gdrom_bdops = { |
diff --git a/drivers/cdrom/viocd.c b/drivers/cdrom/viocd.c index 031e0e1a1a3b..abc4079c3f41 100644 --- a/drivers/cdrom/viocd.c +++ b/drivers/cdrom/viocd.c | |||
| @@ -154,20 +154,22 @@ static const struct file_operations proc_viocd_operations = { | |||
| 154 | static int viocd_blk_open(struct inode *inode, struct file *file) | 154 | static int viocd_blk_open(struct inode *inode, struct file *file) |
| 155 | { | 155 | { |
| 156 | struct disk_info *di = inode->i_bdev->bd_disk->private_data; | 156 | struct disk_info *di = inode->i_bdev->bd_disk->private_data; |
| 157 | return cdrom_open(&di->viocd_info, inode, file); | 157 | return cdrom_open(&di->viocd_info, inode->i_bdev, file->f_mode); |
| 158 | } | 158 | } |
| 159 | 159 | ||
| 160 | static int viocd_blk_release(struct inode *inode, struct file *file) | 160 | static int viocd_blk_release(struct inode *inode, struct file *file) |
| 161 | { | 161 | { |
| 162 | struct disk_info *di = inode->i_bdev->bd_disk->private_data; | 162 | struct disk_info *di = inode->i_bdev->bd_disk->private_data; |
| 163 | return cdrom_release(&di->viocd_info, file); | 163 | cdrom_release(&di->viocd_info, file ? file->f_mode : 0); |
| 164 | return 0; | ||
| 164 | } | 165 | } |
| 165 | 166 | ||
| 166 | static int viocd_blk_ioctl(struct inode *inode, struct file *file, | 167 | static int viocd_blk_ioctl(struct inode *inode, struct file *file, |
| 167 | unsigned cmd, unsigned long arg) | 168 | unsigned cmd, unsigned long arg) |
| 168 | { | 169 | { |
| 169 | struct disk_info *di = inode->i_bdev->bd_disk->private_data; | 170 | struct disk_info *di = inode->i_bdev->bd_disk->private_data; |
| 170 | return cdrom_ioctl(file, &di->viocd_info, inode, cmd, arg); | 171 | return cdrom_ioctl(&di->viocd_info, inode->i_bdev, |
| 172 | file ? file->f_mode : 0, cmd, arg); | ||
| 171 | } | 173 | } |
| 172 | 174 | ||
| 173 | static int viocd_blk_media_changed(struct gendisk *disk) | 175 | static int viocd_blk_media_changed(struct gendisk *disk) |
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index cd21b34fe509..87d90200b169 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c | |||
| @@ -2099,7 +2099,7 @@ static int idecd_open(struct inode *inode, struct file *file) | |||
| 2099 | if (!info) | 2099 | if (!info) |
| 2100 | return -ENXIO; | 2100 | return -ENXIO; |
| 2101 | 2101 | ||
| 2102 | rc = cdrom_open(&info->devinfo, inode, file); | 2102 | rc = cdrom_open(&info->devinfo, inode->i_bdev, file->f_mode); |
| 2103 | 2103 | ||
| 2104 | if (rc < 0) | 2104 | if (rc < 0) |
| 2105 | ide_cd_put(info); | 2105 | ide_cd_put(info); |
| @@ -2112,7 +2112,7 @@ static int idecd_release(struct inode *inode, struct file *file) | |||
| 2112 | struct gendisk *disk = inode->i_bdev->bd_disk; | 2112 | struct gendisk *disk = inode->i_bdev->bd_disk; |
| 2113 | struct cdrom_info *info = ide_drv_g(disk, cdrom_info); | 2113 | struct cdrom_info *info = ide_drv_g(disk, cdrom_info); |
| 2114 | 2114 | ||
| 2115 | cdrom_release(&info->devinfo, file); | 2115 | cdrom_release(&info->devinfo, file ? file->f_mode : 0); |
| 2116 | 2116 | ||
| 2117 | ide_cd_put(info); | 2117 | ide_cd_put(info); |
| 2118 | 2118 | ||
| @@ -2176,7 +2176,8 @@ static int idecd_ioctl(struct inode *inode, struct file *file, | |||
| 2176 | 2176 | ||
| 2177 | err = generic_ide_ioctl(info->drive, bdev, cmd, arg); | 2177 | err = generic_ide_ioctl(info->drive, bdev, cmd, arg); |
| 2178 | if (err == -EINVAL) | 2178 | if (err == -EINVAL) |
| 2179 | err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg); | 2179 | err = cdrom_ioctl(&info->devinfo, bdev, |
| 2180 | file ? file->f_mode : 0, cmd, arg); | ||
| 2180 | 2181 | ||
| 2181 | return err; | 2182 | return err; |
| 2182 | } | 2183 | } |
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 0f17009c99d2..b92e2dac9aa9 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c | |||
| @@ -480,7 +480,7 @@ static int sr_block_open(struct inode *inode, struct file *file) | |||
| 480 | if(!(cd = scsi_cd_get(disk))) | 480 | if(!(cd = scsi_cd_get(disk))) |
| 481 | return -ENXIO; | 481 | return -ENXIO; |
| 482 | 482 | ||
| 483 | if((ret = cdrom_open(&cd->cdi, inode, file)) != 0) | 483 | if((ret = cdrom_open(&cd->cdi, inode->i_bdev, file->f_mode)) != 0) |
| 484 | scsi_cd_put(cd); | 484 | scsi_cd_put(cd); |
| 485 | 485 | ||
| 486 | return ret; | 486 | return ret; |
| @@ -488,12 +488,8 @@ static int sr_block_open(struct inode *inode, struct file *file) | |||
| 488 | 488 | ||
| 489 | static int sr_block_release(struct inode *inode, struct file *file) | 489 | static int sr_block_release(struct inode *inode, struct file *file) |
| 490 | { | 490 | { |
| 491 | int ret; | ||
| 492 | struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk); | 491 | struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk); |
| 493 | ret = cdrom_release(&cd->cdi, file); | 492 | cdrom_release(&cd->cdi, file ? file->f_mode : 0); |
| 494 | if(ret) | ||
| 495 | return ret; | ||
| 496 | |||
| 497 | scsi_cd_put(cd); | 493 | scsi_cd_put(cd); |
| 498 | 494 | ||
| 499 | return 0; | 495 | return 0; |
| @@ -517,7 +513,8 @@ static int sr_block_ioctl(struct inode *inode, struct file *file, unsigned cmd, | |||
| 517 | return scsi_ioctl(sdev, cmd, argp); | 513 | return scsi_ioctl(sdev, cmd, argp); |
| 518 | } | 514 | } |
| 519 | 515 | ||
| 520 | ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg); | 516 | ret = cdrom_ioctl(&cd->cdi, inode->i_bdev, |
| 517 | file ? file->f_mode : 0, cmd, arg); | ||
| 521 | if (ret != -ENOSYS) | 518 | if (ret != -ENOSYS) |
| 522 | return ret; | 519 | return ret; |
| 523 | 520 | ||
diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h index 5db265ea60f6..0b49e08d3cb0 100644 --- a/include/linux/cdrom.h +++ b/include/linux/cdrom.h | |||
| @@ -987,11 +987,11 @@ struct cdrom_device_ops { | |||
| 987 | }; | 987 | }; |
| 988 | 988 | ||
| 989 | /* the general block_device operations structure: */ | 989 | /* the general block_device operations structure: */ |
| 990 | extern int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, | 990 | extern int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, |
| 991 | struct file *fp); | 991 | fmode_t mode); |
| 992 | extern int cdrom_release(struct cdrom_device_info *cdi, struct file *fp); | 992 | extern void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode); |
| 993 | extern int cdrom_ioctl(struct file *file, struct cdrom_device_info *cdi, | 993 | extern int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, |
| 994 | struct inode *ip, unsigned int cmd, unsigned long arg); | 994 | fmode_t mode, unsigned int cmd, unsigned long arg); |
| 995 | extern int cdrom_media_changed(struct cdrom_device_info *); | 995 | extern int cdrom_media_changed(struct cdrom_device_info *); |
| 996 | 996 | ||
| 997 | extern int register_cdrom(struct cdrom_device_info *cdi); | 997 | extern int register_cdrom(struct cdrom_device_info *cdi); |
