Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] switch cdrom_{open,release,ioctl} to sane APIs

... convert to it in callers

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

Al Viro bbc1cc97 08f85851

+38 -36
+5 -3
drivers/block/paride/pcd.c
··· 226 226 static int pcd_block_open(struct inode *inode, struct file *file) 227 227 { 228 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 232 static int pcd_block_release(struct inode *inode, struct file *file) 233 233 { 234 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 239 static int pcd_block_ioctl(struct inode *inode, struct file *file, 239 240 unsigned cmd, unsigned long arg) 240 241 { 241 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 247 static int pcd_block_media_changed(struct gendisk *disk)
+11 -12
drivers/cdrom/cdrom.c
··· 973 973 * is in their own interest: device control becomes a lot easier 974 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 978 int ret; 979 979 ··· 982 982 /* if this was a O_NONBLOCK open and we should honor the flags, 983 983 * do a quick open without drive/disc integrity checks. */ 984 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 986 ret = cdi->ops->open(cdi, 1); 987 987 } else { 988 988 ret = open_for_data(cdi); 989 989 if (ret) 990 990 goto err; 991 991 cdrom_mmc3_profile(cdi); 992 - if (fp->f_mode & FMODE_WRITE) { 992 + if (mode & FMODE_WRITE) { 993 993 ret = -EROFS; 994 994 if (cdrom_open_write(cdi)) 995 995 goto err_release; ··· 1007 1007 cdi->name, cdi->use_count); 1008 1008 /* Do this on open. Don't wait for mount, because they might 1009 1009 not be mounting, but opening with O_NONBLOCK */ 1010 - check_disk_change(ip->i_bdev); 1010 + check_disk_change(bdev); 1011 1011 return 0; 1012 1012 err_release: 1013 1013 if (CDROM_CAN(CDC_LOCK) && cdi->options & CDO_LOCK) { ··· 1184 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 1189 struct cdrom_device_ops *cdo = cdi->ops; 1190 1190 int opened_for_data; ··· 1205 1205 } 1206 1206 1207 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 1211 * flush cache on last write release ··· 1219 1219 cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY)) 1220 1220 cdo->tray_move(cdi, 1); 1221 1221 } 1222 - return 0; 1223 1222 } 1224 1223 1225 1224 static int cdrom_read_mech_status(struct cdrom_device_info *cdi, ··· 2661 2662 * these days. 2662 2663 * ATAPI / SCSI specific code now mainly resides in mmc_ioctl(). 2663 2664 */ 2664 - int cdrom_ioctl(struct file * file, struct cdrom_device_info *cdi, 2665 - struct inode *ip, unsigned int cmd, unsigned long arg) 2665 + int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, 2666 + fmode_t mode, unsigned int cmd, unsigned long arg) 2666 2667 { 2667 2668 void __user *argp = (void __user *)arg; 2668 2669 int ret; 2669 - struct gendisk *disk = ip->i_bdev->bd_disk; 2670 + struct gendisk *disk = bdev->bd_disk; 2670 2671 2671 2672 /* 2672 2673 * Try the generic SCSI command ioctl's first. 2673 2674 */ 2674 - ret = scsi_cmd_ioctl(disk->queue, disk, file ? file->f_mode : 0, cmd, argp); 2675 + ret = scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); 2675 2676 if (ret != -ENOTTY) 2676 2677 return ret; 2677 2678 ··· 2695 2696 case CDROM_SELECT_DISC: 2696 2697 return cdrom_ioctl_select_disc(cdi, arg); 2697 2698 case CDROMRESET: 2698 - return cdrom_ioctl_reset(cdi, ip->i_bdev); 2699 + return cdrom_ioctl_reset(cdi, bdev); 2699 2700 case CDROM_LOCKDOOR: 2700 2701 return cdrom_ioctl_lock_door(cdi, arg); 2701 2702 case CDROM_DEBUG:
+4 -3
drivers/cdrom/gdrom.c
··· 492 492 493 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 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 503 static int gdrom_bdops_mediachanged(struct gendisk *disk) ··· 508 508 static int gdrom_bdops_ioctl(struct inode *inode, struct file *file, 509 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 515 static struct block_device_operations gdrom_bdops = {
+5 -3
drivers/cdrom/viocd.c
··· 154 154 static int viocd_blk_open(struct inode *inode, struct file *file) 155 155 { 156 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 160 static int viocd_blk_release(struct inode *inode, struct file *file) 161 161 { 162 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 167 static int viocd_blk_ioctl(struct inode *inode, struct file *file, 167 168 unsigned cmd, unsigned long arg) 168 169 { 169 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 175 static int viocd_blk_media_changed(struct gendisk *disk)
+4 -3
drivers/ide/ide-cd.c
··· 2099 2099 if (!info) 2100 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 2104 if (rc < 0) 2105 2105 ide_cd_put(info); ··· 2112 2112 struct gendisk *disk = inode->i_bdev->bd_disk; 2113 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 2117 ide_cd_put(info); 2118 2118 ··· 2176 2176 2177 2177 err = generic_ide_ioctl(info->drive, bdev, cmd, arg); 2178 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 2182 return err; 2182 2183 }
+4 -7
drivers/scsi/sr.c
··· 480 480 if(!(cd = scsi_cd_get(disk))) 481 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 484 scsi_cd_put(cd); 485 485 486 486 return ret; ··· 488 488 489 489 static int sr_block_release(struct inode *inode, struct file *file) 490 490 { 491 - int ret; 492 491 struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk); 493 - ret = cdrom_release(&cd->cdi, file); 494 - if(ret) 495 - return ret; 496 - 492 + cdrom_release(&cd->cdi, file ? file->f_mode : 0); 497 493 scsi_cd_put(cd); 498 494 499 495 return 0; ··· 513 517 return scsi_ioctl(sdev, cmd, argp); 514 518 } 515 519 516 - ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg); 520 + ret = cdrom_ioctl(&cd->cdi, inode->i_bdev, 521 + file ? file->f_mode : 0, cmd, arg); 517 522 if (ret != -ENOSYS) 518 523 return ret; 519 524
+5 -5
include/linux/cdrom.h
··· 987 987 }; 988 988 989 989 /* the general block_device operations structure: */ 990 - extern int cdrom_open(struct cdrom_device_info *cdi, struct inode *ip, 991 - struct file *fp); 992 - extern int cdrom_release(struct cdrom_device_info *cdi, struct file *fp); 993 - extern int cdrom_ioctl(struct file *file, struct cdrom_device_info *cdi, 994 - struct inode *ip, unsigned int cmd, unsigned long arg); 990 + extern int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, 991 + fmode_t mode); 992 + extern void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode); 993 + extern int cdrom_ioctl(struct cdrom_device_info *cdi, struct block_device *bdev, 994 + fmode_t mode, unsigned int cmd, unsigned long arg); 995 995 extern int cdrom_media_changed(struct cdrom_device_info *); 996 996 997 997 extern int register_cdrom(struct cdrom_device_info *cdi);