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

Merge git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev

* git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev: (66 commits)
[PATCH] kill the rest of struct file propagation in block ioctls
[PATCH] get rid of struct file use in blkdev_ioctl() BLKBSZSET
[PATCH] get rid of blkdev_locked_ioctl()
[PATCH] get rid of blkdev_driver_ioctl()
[PATCH] sanitize blkdev_get() and friends
[PATCH] remember mode of reiserfs journal
[PATCH] propagate mode through swsusp_close()
[PATCH] propagate mode through open_bdev_excl/close_bdev_excl
[PATCH] pass fmode_t to blkdev_put()
[PATCH] kill the unused bsize on the send side of /dev/loop
[PATCH] trim file propagation in block/compat_ioctl.c
[PATCH] end of methods switch: remove the old ones
[PATCH] switch sr
[PATCH] switch sd
[PATCH] switch ide-scsi
[PATCH] switch tape_block
[PATCH] switch dcssblk
[PATCH] switch dasd
[PATCH] switch mtd_blkdevs
[PATCH] switch mmc
...

+868 -1002
+9 -10
arch/um/drivers/ubd_kern.c
··· 98 98 99 99 static DEFINE_MUTEX(ubd_lock); 100 100 101 - static int ubd_open(struct inode * inode, struct file * filp); 102 - static int ubd_release(struct inode * inode, struct file * file); 103 - static int ubd_ioctl(struct inode * inode, struct file * file, 101 + static int ubd_open(struct block_device *bdev, fmode_t mode); 102 + static int ubd_release(struct gendisk *disk, fmode_t mode); 103 + static int ubd_ioctl(struct block_device *bdev, fmode_t mode, 104 104 unsigned int cmd, unsigned long arg); 105 105 static int ubd_getgeo(struct block_device *bdev, struct hd_geometry *geo); 106 106 ··· 1112 1112 1113 1113 device_initcall(ubd_driver_init); 1114 1114 1115 - static int ubd_open(struct inode *inode, struct file *filp) 1115 + static int ubd_open(struct block_device *bdev, fmode_t mode) 1116 1116 { 1117 - struct gendisk *disk = inode->i_bdev->bd_disk; 1117 + struct gendisk *disk = bdev->bd_disk; 1118 1118 struct ubd *ubd_dev = disk->private_data; 1119 1119 int err = 0; 1120 1120 ··· 1131 1131 1132 1132 /* This should no more be needed. And it didn't work anyway to exclude 1133 1133 * read-write remounting of filesystems.*/ 1134 - /*if((filp->f_mode & FMODE_WRITE) && !ubd_dev->openflags.w){ 1134 + /*if((mode & FMODE_WRITE) && !ubd_dev->openflags.w){ 1135 1135 if(--ubd_dev->count == 0) ubd_close_dev(ubd_dev); 1136 1136 err = -EROFS; 1137 1137 }*/ ··· 1139 1139 return err; 1140 1140 } 1141 1141 1142 - static int ubd_release(struct inode * inode, struct file * file) 1142 + static int ubd_release(struct gendisk *disk, fmode_t mode) 1143 1143 { 1144 - struct gendisk *disk = inode->i_bdev->bd_disk; 1145 1144 struct ubd *ubd_dev = disk->private_data; 1146 1145 1147 1146 if(--ubd_dev->count == 0) ··· 1305 1306 return 0; 1306 1307 } 1307 1308 1308 - static int ubd_ioctl(struct inode * inode, struct file * file, 1309 + static int ubd_ioctl(struct block_device *bdev, fmode_t mode, 1309 1310 unsigned int cmd, unsigned long arg) 1310 1311 { 1311 - struct ubd *ubd_dev = inode->i_bdev->bd_disk->private_data; 1312 + struct ubd *ubd_dev = bdev->bd_disk->private_data; 1312 1313 struct hd_driveid ubd_id = { 1313 1314 .cyls = 0, 1314 1315 .heads = 128,
+5 -4
block/bsg.c
··· 173 173 174 174 static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq, 175 175 struct sg_io_v4 *hdr, struct bsg_device *bd, 176 - int has_write_perm) 176 + fmode_t has_write_perm) 177 177 { 178 178 if (hdr->request_len > BLK_MAX_CDB) { 179 179 rq->cmd = kzalloc(hdr->request_len, GFP_KERNEL); ··· 242 242 * map sg_io_v4 to a request. 243 243 */ 244 244 static struct request * 245 - bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, int has_write_perm) 245 + bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm) 246 246 { 247 247 struct request_queue *q = bd->queue; 248 248 struct request *rq, *next_rq = NULL; ··· 601 601 } 602 602 603 603 static int __bsg_write(struct bsg_device *bd, const char __user *buf, 604 - size_t count, ssize_t *bytes_written, int has_write_perm) 604 + size_t count, ssize_t *bytes_written, 605 + fmode_t has_write_perm) 605 606 { 606 607 struct bsg_command *bc; 607 608 struct request *rq; ··· 914 913 case SG_EMULATED_HOST: 915 914 case SCSI_IOCTL_SEND_COMMAND: { 916 915 void __user *uarg = (void __user *) arg; 917 - return scsi_cmd_ioctl(file, bd->queue, NULL, cmd, uarg); 916 + return scsi_cmd_ioctl(bd->queue, NULL, file->f_mode, cmd, uarg); 918 917 } 919 918 case SG_IO: { 920 919 struct request *rq;
+1 -1
block/cmd-filter.c
··· 27 27 #include <linux/cdrom.h> 28 28 29 29 int blk_verify_command(struct blk_cmd_filter *filter, 30 - unsigned char *cmd, int has_write_perm) 30 + unsigned char *cmd, fmode_t has_write_perm) 31 31 { 32 32 /* root can do any command. */ 33 33 if (capable(CAP_SYS_RAWIO))
+70 -105
block/compat_ioctl.c
··· 71 71 return ret; 72 72 } 73 73 74 - static int compat_hdio_ioctl(struct inode *inode, struct file *file, 75 - struct gendisk *disk, unsigned int cmd, unsigned long arg) 74 + static int compat_hdio_ioctl(struct block_device *bdev, fmode_t mode, 75 + unsigned int cmd, unsigned long arg) 76 76 { 77 77 mm_segment_t old_fs = get_fs(); 78 78 unsigned long kval; ··· 80 80 int error; 81 81 82 82 set_fs(KERNEL_DS); 83 - error = blkdev_driver_ioctl(inode, file, disk, 83 + error = __blkdev_driver_ioctl(bdev, mode, 84 84 cmd, (unsigned long)(&kval)); 85 85 set_fs(old_fs); 86 86 ··· 111 111 compat_caddr_t reserved[1]; 112 112 }; 113 113 114 - static int compat_cdrom_read_audio(struct inode *inode, struct file *file, 115 - struct gendisk *disk, unsigned int cmd, unsigned long arg) 114 + static int compat_cdrom_read_audio(struct block_device *bdev, fmode_t mode, 115 + unsigned int cmd, unsigned long arg) 116 116 { 117 117 struct cdrom_read_audio __user *cdread_audio; 118 118 struct compat_cdrom_read_audio __user *cdread_audio32; ··· 134 134 if (put_user(datap, &cdread_audio->buf)) 135 135 return -EFAULT; 136 136 137 - return blkdev_driver_ioctl(inode, file, disk, cmd, 137 + return __blkdev_driver_ioctl(bdev, mode, cmd, 138 138 (unsigned long)cdread_audio); 139 139 } 140 140 141 - static int compat_cdrom_generic_command(struct inode *inode, struct file *file, 142 - struct gendisk *disk, unsigned int cmd, unsigned long arg) 141 + static int compat_cdrom_generic_command(struct block_device *bdev, fmode_t mode, 142 + unsigned int cmd, unsigned long arg) 143 143 { 144 144 struct cdrom_generic_command __user *cgc; 145 145 struct compat_cdrom_generic_command __user *cgc32; ··· 167 167 put_user(compat_ptr(data), &cgc->reserved[0])) 168 168 return -EFAULT; 169 169 170 - return blkdev_driver_ioctl(inode, file, disk, cmd, (unsigned long)cgc); 170 + return __blkdev_driver_ioctl(bdev, mode, cmd, (unsigned long)cgc); 171 171 } 172 172 173 173 struct compat_blkpg_ioctl_arg { ··· 177 177 compat_caddr_t data; 178 178 }; 179 179 180 - static int compat_blkpg_ioctl(struct inode *inode, struct file *file, 180 + static int compat_blkpg_ioctl(struct block_device *bdev, fmode_t mode, 181 181 unsigned int cmd, struct compat_blkpg_ioctl_arg __user *ua32) 182 182 { 183 183 struct blkpg_ioctl_arg __user *a = compat_alloc_user_space(sizeof(*a)); ··· 196 196 if (err) 197 197 return err; 198 198 199 - return blkdev_ioctl(inode, file, cmd, (unsigned long)a); 199 + return blkdev_ioctl(bdev, mode, cmd, (unsigned long)a); 200 200 } 201 201 202 202 #define BLKBSZGET_32 _IOR(0x12, 112, int) ··· 308 308 309 309 #define NR_FD_IOCTL_TRANS ARRAY_SIZE(fd_ioctl_trans_table) 310 310 311 - static int compat_fd_ioctl(struct inode *inode, struct file *file, 312 - struct gendisk *disk, unsigned int cmd, unsigned long arg) 311 + static int compat_fd_ioctl(struct block_device *bdev, fmode_t mode, 312 + unsigned int cmd, unsigned long arg) 313 313 { 314 314 mm_segment_t old_fs = get_fs(); 315 315 void *karg = NULL; ··· 413 413 return -EINVAL; 414 414 } 415 415 set_fs(KERNEL_DS); 416 - err = blkdev_driver_ioctl(inode, file, disk, kcmd, (unsigned long)karg); 416 + err = __blkdev_driver_ioctl(bdev, mode, kcmd, (unsigned long)karg); 417 417 set_fs(old_fs); 418 418 if (err) 419 419 goto out; ··· 579 579 return 0; 580 580 } 581 581 582 - static int compat_blkdev_driver_ioctl(struct inode *inode, struct file *file, 583 - struct gendisk *disk, unsigned cmd, unsigned long arg) 582 + static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, 583 + unsigned cmd, unsigned long arg) 584 584 { 585 585 int ret; 586 586 ··· 596 596 case HDIO_GET_ACOUSTIC: 597 597 case HDIO_GET_ADDRESS: 598 598 case HDIO_GET_BUSSTATE: 599 - return compat_hdio_ioctl(inode, file, disk, cmd, arg); 599 + return compat_hdio_ioctl(bdev, mode, cmd, arg); 600 600 case FDSETPRM32: 601 601 case FDDEFPRM32: 602 602 case FDGETPRM32: ··· 606 606 case FDPOLLDRVSTAT32: 607 607 case FDGETFDCSTAT32: 608 608 case FDWERRORGET32: 609 - return compat_fd_ioctl(inode, file, disk, cmd, arg); 609 + return compat_fd_ioctl(bdev, mode, cmd, arg); 610 610 case CDROMREADAUDIO: 611 - return compat_cdrom_read_audio(inode, file, disk, cmd, arg); 611 + return compat_cdrom_read_audio(bdev, mode, cmd, arg); 612 612 case CDROM_SEND_PACKET: 613 - return compat_cdrom_generic_command(inode, file, disk, cmd, arg); 613 + return compat_cdrom_generic_command(bdev, mode, cmd, arg); 614 614 615 615 /* 616 616 * No handler required for the ones below, we just need to ··· 679 679 case DVD_WRITE_STRUCT: 680 680 case DVD_AUTH: 681 681 arg = (unsigned long)compat_ptr(arg); 682 - /* These intepret arg as an unsigned long, not as a pointer, 683 - * so we must not do compat_ptr() conversion. */ 684 - case HDIO_SET_MULTCOUNT: 685 - case HDIO_SET_UNMASKINTR: 686 - case HDIO_SET_KEEPSETTINGS: 687 - case HDIO_SET_32BIT: 688 - case HDIO_SET_NOWERR: 689 - case HDIO_SET_DMA: 690 - case HDIO_SET_PIO_MODE: 691 - case HDIO_SET_NICE: 692 - case HDIO_SET_WCACHE: 693 - case HDIO_SET_ACOUSTIC: 694 - case HDIO_SET_BUSSTATE: 695 - case HDIO_SET_ADDRESS: 696 - case CDROMEJECT_SW: 697 - case CDROM_SET_OPTIONS: 698 - case CDROM_CLEAR_OPTIONS: 699 - case CDROM_SELECT_SPEED: 700 - case CDROM_SELECT_DISC: 701 - case CDROM_MEDIA_CHANGED: 702 - case CDROM_DRIVE_STATUS: 703 - case CDROM_LOCKDOOR: 704 - case CDROM_DEBUG: 705 682 break; 706 683 default: 707 684 /* unknown ioctl number */ 708 685 return -ENOIOCTLCMD; 709 686 } 710 687 711 - if (disk->fops->unlocked_ioctl) 712 - return disk->fops->unlocked_ioctl(file, cmd, arg); 713 - 714 - if (disk->fops->ioctl) { 715 - lock_kernel(); 716 - ret = disk->fops->ioctl(inode, file, cmd, arg); 717 - unlock_kernel(); 718 - return ret; 719 - } 720 - 721 - return -ENOTTY; 688 + return __blkdev_driver_ioctl(bdev, mode, cmd, arg); 722 689 } 723 690 724 - static int compat_blkdev_locked_ioctl(struct inode *inode, struct file *file, 725 - struct block_device *bdev, 726 - unsigned cmd, unsigned long arg) 691 + /* Most of the generic ioctls are handled in the normal fallback path. 692 + This assumes the blkdev's low level compat_ioctl always returns 693 + ENOIOCTLCMD for unknown ioctls. */ 694 + long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg) 727 695 { 696 + int ret = -ENOIOCTLCMD; 697 + struct inode *inode = file->f_mapping->host; 698 + struct block_device *bdev = inode->i_bdev; 699 + struct gendisk *disk = bdev->bd_disk; 700 + fmode_t mode = file->f_mode; 728 701 struct backing_dev_info *bdi; 702 + loff_t size; 703 + 704 + if (file->f_flags & O_NDELAY) 705 + mode |= FMODE_NDELAY_NOW; 729 706 730 707 switch (cmd) { 708 + case HDIO_GETGEO: 709 + return compat_hdio_getgeo(disk, bdev, compat_ptr(arg)); 710 + case BLKFLSBUF: 711 + case BLKROSET: 712 + case BLKDISCARD: 713 + /* 714 + * the ones below are implemented in blkdev_locked_ioctl, 715 + * but we call blkdev_ioctl, which gets the lock for us 716 + */ 717 + case BLKRRPART: 718 + return blkdev_ioctl(bdev, mode, cmd, 719 + (unsigned long)compat_ptr(arg)); 720 + case BLKBSZSET_32: 721 + return blkdev_ioctl(bdev, mode, BLKBSZSET, 722 + (unsigned long)compat_ptr(arg)); 723 + case BLKPG: 724 + return compat_blkpg_ioctl(bdev, mode, cmd, compat_ptr(arg)); 731 725 case BLKRAGET: 732 726 case BLKFRAGET: 733 727 if (!arg) ··· 747 753 bdi = blk_get_backing_dev_info(bdev); 748 754 if (bdi == NULL) 749 755 return -ENOTTY; 756 + lock_kernel(); 750 757 bdi->ra_pages = (arg * 512) / PAGE_CACHE_SIZE; 758 + unlock_kernel(); 751 759 return 0; 752 760 case BLKGETSIZE: 753 - if ((bdev->bd_inode->i_size >> 9) > ~0UL) 761 + size = bdev->bd_inode->i_size; 762 + if ((size >> 9) > ~0UL) 754 763 return -EFBIG; 755 - return compat_put_ulong(arg, bdev->bd_inode->i_size >> 9); 764 + return compat_put_ulong(arg, size >> 9); 756 765 757 766 case BLKGETSIZE64_32: 758 767 return compat_put_u64(arg, bdev->bd_inode->i_size); 759 768 760 769 case BLKTRACESETUP32: 761 - return compat_blk_trace_setup(bdev, compat_ptr(arg)); 770 + lock_kernel(); 771 + ret = compat_blk_trace_setup(bdev, compat_ptr(arg)); 772 + unlock_kernel(); 773 + return ret; 762 774 case BLKTRACESTART: /* compatible */ 763 775 case BLKTRACESTOP: /* compatible */ 764 776 case BLKTRACETEARDOWN: /* compatible */ 765 - return blk_trace_ioctl(bdev, cmd, compat_ptr(arg)); 766 - } 767 - return -ENOIOCTLCMD; 768 - } 769 - 770 - /* Most of the generic ioctls are handled in the normal fallback path. 771 - This assumes the blkdev's low level compat_ioctl always returns 772 - ENOIOCTLCMD for unknown ioctls. */ 773 - long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg) 774 - { 775 - int ret = -ENOIOCTLCMD; 776 - struct inode *inode = file->f_mapping->host; 777 - struct block_device *bdev = inode->i_bdev; 778 - struct gendisk *disk = bdev->bd_disk; 779 - 780 - switch (cmd) { 781 - case HDIO_GETGEO: 782 - return compat_hdio_getgeo(disk, bdev, compat_ptr(arg)); 783 - case BLKFLSBUF: 784 - case BLKROSET: 785 - case BLKDISCARD: 786 - /* 787 - * the ones below are implemented in blkdev_locked_ioctl, 788 - * but we call blkdev_ioctl, which gets the lock for us 789 - */ 790 - case BLKRRPART: 791 - return blkdev_ioctl(inode, file, cmd, 792 - (unsigned long)compat_ptr(arg)); 793 - case BLKBSZSET_32: 794 - return blkdev_ioctl(inode, file, BLKBSZSET, 795 - (unsigned long)compat_ptr(arg)); 796 - case BLKPG: 797 - return compat_blkpg_ioctl(inode, file, cmd, compat_ptr(arg)); 798 - } 799 - 800 - lock_kernel(); 801 - ret = compat_blkdev_locked_ioctl(inode, file, bdev, cmd, arg); 802 - /* FIXME: why do we assume -> compat_ioctl needs the BKL? */ 803 - if (ret == -ENOIOCTLCMD && disk->fops->compat_ioctl) 804 - ret = disk->fops->compat_ioctl(file, cmd, arg); 805 - unlock_kernel(); 806 - 807 - if (ret != -ENOIOCTLCMD) 777 + lock_kernel(); 778 + ret = blk_trace_ioctl(bdev, cmd, compat_ptr(arg)); 779 + unlock_kernel(); 808 780 return ret; 809 - 810 - return compat_blkdev_driver_ioctl(inode, file, disk, cmd, arg); 781 + default: 782 + if (disk->fops->compat_ioctl) 783 + ret = disk->fops->compat_ioctl(bdev, mode, cmd, arg); 784 + if (ret == -ENOIOCTLCMD) 785 + ret = compat_blkdev_driver_ioctl(bdev, mode, cmd, arg); 786 + return ret; 787 + } 811 788 }
+89 -84
block/ioctl.c
··· 201 201 return put_user(val, (u64 __user *)arg); 202 202 } 203 203 204 - static int blkdev_locked_ioctl(struct file *file, struct block_device *bdev, 205 - unsigned cmd, unsigned long arg) 204 + int __blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, 205 + unsigned cmd, unsigned long arg) 206 206 { 207 - struct backing_dev_info *bdi; 208 - int ret, n; 209 - 210 - switch (cmd) { 211 - case BLKRAGET: 212 - case BLKFRAGET: 213 - if (!arg) 214 - return -EINVAL; 215 - bdi = blk_get_backing_dev_info(bdev); 216 - if (bdi == NULL) 217 - return -ENOTTY; 218 - return put_long(arg, (bdi->ra_pages * PAGE_CACHE_SIZE) / 512); 219 - case BLKROGET: 220 - return put_int(arg, bdev_read_only(bdev) != 0); 221 - case BLKBSZGET: /* get the logical block size (cf. BLKSSZGET) */ 222 - return put_int(arg, block_size(bdev)); 223 - case BLKSSZGET: /* get block device hardware sector size */ 224 - return put_int(arg, bdev_hardsect_size(bdev)); 225 - case BLKSECTGET: 226 - return put_ushort(arg, bdev_get_queue(bdev)->max_sectors); 227 - case BLKRASET: 228 - case BLKFRASET: 229 - if(!capable(CAP_SYS_ADMIN)) 230 - return -EACCES; 231 - bdi = blk_get_backing_dev_info(bdev); 232 - if (bdi == NULL) 233 - return -ENOTTY; 234 - bdi->ra_pages = (arg * 512) / PAGE_CACHE_SIZE; 235 - return 0; 236 - case BLKBSZSET: 237 - /* set the logical block size */ 238 - if (!capable(CAP_SYS_ADMIN)) 239 - return -EACCES; 240 - if (!arg) 241 - return -EINVAL; 242 - if (get_user(n, (int __user *) arg)) 243 - return -EFAULT; 244 - if (bd_claim(bdev, file) < 0) 245 - return -EBUSY; 246 - ret = set_blocksize(bdev, n); 247 - bd_release(bdev); 248 - return ret; 249 - case BLKPG: 250 - return blkpg_ioctl(bdev, (struct blkpg_ioctl_arg __user *) arg); 251 - case BLKRRPART: 252 - return blkdev_reread_part(bdev); 253 - case BLKGETSIZE: 254 - if ((bdev->bd_inode->i_size >> 9) > ~0UL) 255 - return -EFBIG; 256 - return put_ulong(arg, bdev->bd_inode->i_size >> 9); 257 - case BLKGETSIZE64: 258 - return put_u64(arg, bdev->bd_inode->i_size); 259 - case BLKTRACESTART: 260 - case BLKTRACESTOP: 261 - case BLKTRACESETUP: 262 - case BLKTRACETEARDOWN: 263 - return blk_trace_ioctl(bdev, cmd, (char __user *) arg); 264 - } 265 - return -ENOIOCTLCMD; 266 - } 267 - 268 - int blkdev_driver_ioctl(struct inode *inode, struct file *file, 269 - struct gendisk *disk, unsigned cmd, unsigned long arg) 270 - { 207 + struct gendisk *disk = bdev->bd_disk; 271 208 int ret; 272 - if (disk->fops->unlocked_ioctl) 273 - return disk->fops->unlocked_ioctl(file, cmd, arg); 274 209 275 - if (disk->fops->ioctl) { 210 + if (disk->fops->ioctl) 211 + return disk->fops->ioctl(bdev, mode, cmd, arg); 212 + 213 + if (disk->fops->locked_ioctl) { 276 214 lock_kernel(); 277 - ret = disk->fops->ioctl(inode, file, cmd, arg); 215 + ret = disk->fops->locked_ioctl(bdev, mode, cmd, arg); 278 216 unlock_kernel(); 279 217 return ret; 280 218 } 281 219 282 220 return -ENOTTY; 283 221 } 284 - EXPORT_SYMBOL_GPL(blkdev_driver_ioctl); 222 + /* 223 + * For the record: _GPL here is only because somebody decided to slap it 224 + * on the previous export. Sheer idiocy, since it wasn't copyrightable 225 + * at all and could be open-coded without any exports by anybody who cares. 226 + */ 227 + EXPORT_SYMBOL_GPL(__blkdev_driver_ioctl); 285 228 286 229 /* 287 230 * always keep this in sync with compat_blkdev_ioctl() and 288 231 * compat_blkdev_locked_ioctl() 289 232 */ 290 - int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd, 233 + int blkdev_ioctl(struct block_device *bdev, fmode_t mode, unsigned cmd, 291 234 unsigned long arg) 292 235 { 293 - struct block_device *bdev = inode->i_bdev; 294 236 struct gendisk *disk = bdev->bd_disk; 237 + struct backing_dev_info *bdi; 238 + loff_t size; 295 239 int ret, n; 296 240 297 241 switch(cmd) { ··· 243 299 if (!capable(CAP_SYS_ADMIN)) 244 300 return -EACCES; 245 301 246 - ret = blkdev_driver_ioctl(inode, file, disk, cmd, arg); 302 + ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); 247 303 /* -EINVAL to handle old uncorrected drivers */ 248 304 if (ret != -EINVAL && ret != -ENOTTY) 249 305 return ret; ··· 255 311 return 0; 256 312 257 313 case BLKROSET: 258 - ret = blkdev_driver_ioctl(inode, file, disk, cmd, arg); 314 + ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); 259 315 /* -EINVAL to handle old uncorrected drivers */ 260 316 if (ret != -EINVAL && ret != -ENOTTY) 261 317 return ret; ··· 271 327 case BLKDISCARD: { 272 328 uint64_t range[2]; 273 329 274 - if (!(file->f_mode & FMODE_WRITE)) 330 + if (!(mode & FMODE_WRITE)) 275 331 return -EBADF; 276 332 277 333 if (copy_from_user(range, (void __user *)arg, sizeof(range))) ··· 301 357 return -EFAULT; 302 358 return 0; 303 359 } 304 - } 305 - 306 - lock_kernel(); 307 - ret = blkdev_locked_ioctl(file, bdev, cmd, arg); 308 - unlock_kernel(); 309 - if (ret != -ENOIOCTLCMD) 360 + case BLKRAGET: 361 + case BLKFRAGET: 362 + if (!arg) 363 + return -EINVAL; 364 + bdi = blk_get_backing_dev_info(bdev); 365 + if (bdi == NULL) 366 + return -ENOTTY; 367 + return put_long(arg, (bdi->ra_pages * PAGE_CACHE_SIZE) / 512); 368 + case BLKROGET: 369 + return put_int(arg, bdev_read_only(bdev) != 0); 370 + case BLKBSZGET: /* get the logical block size (cf. BLKSSZGET) */ 371 + return put_int(arg, block_size(bdev)); 372 + case BLKSSZGET: /* get block device hardware sector size */ 373 + return put_int(arg, bdev_hardsect_size(bdev)); 374 + case BLKSECTGET: 375 + return put_ushort(arg, bdev_get_queue(bdev)->max_sectors); 376 + case BLKRASET: 377 + case BLKFRASET: 378 + if(!capable(CAP_SYS_ADMIN)) 379 + return -EACCES; 380 + bdi = blk_get_backing_dev_info(bdev); 381 + if (bdi == NULL) 382 + return -ENOTTY; 383 + lock_kernel(); 384 + bdi->ra_pages = (arg * 512) / PAGE_CACHE_SIZE; 385 + unlock_kernel(); 386 + return 0; 387 + case BLKBSZSET: 388 + /* set the logical block size */ 389 + if (!capable(CAP_SYS_ADMIN)) 390 + return -EACCES; 391 + if (!arg) 392 + return -EINVAL; 393 + if (get_user(n, (int __user *) arg)) 394 + return -EFAULT; 395 + if (!(mode & FMODE_EXCL) && bd_claim(bdev, &bdev) < 0) 396 + return -EBUSY; 397 + ret = set_blocksize(bdev, n); 398 + if (!(mode & FMODE_EXCL)) 399 + bd_release(bdev); 310 400 return ret; 311 - 312 - return blkdev_driver_ioctl(inode, file, disk, cmd, arg); 401 + case BLKPG: 402 + lock_kernel(); 403 + ret = blkpg_ioctl(bdev, (struct blkpg_ioctl_arg __user *) arg); 404 + unlock_kernel(); 405 + break; 406 + case BLKRRPART: 407 + lock_kernel(); 408 + ret = blkdev_reread_part(bdev); 409 + unlock_kernel(); 410 + break; 411 + case BLKGETSIZE: 412 + size = bdev->bd_inode->i_size; 413 + if ((size >> 9) > ~0UL) 414 + return -EFBIG; 415 + return put_ulong(arg, size >> 9); 416 + case BLKGETSIZE64: 417 + return put_u64(arg, bdev->bd_inode->i_size); 418 + case BLKTRACESTART: 419 + case BLKTRACESTOP: 420 + case BLKTRACESETUP: 421 + case BLKTRACETEARDOWN: 422 + lock_kernel(); 423 + ret = blk_trace_ioctl(bdev, cmd, (char __user *) arg); 424 + unlock_kernel(); 425 + break; 426 + default: 427 + ret = __blkdev_driver_ioctl(bdev, mode, cmd, arg); 428 + } 429 + return ret; 313 430 } 314 431 EXPORT_SYMBOL_GPL(blkdev_ioctl);
+14 -19
block/scsi_ioctl.c
··· 190 190 EXPORT_SYMBOL_GPL(blk_set_cmd_filter_defaults); 191 191 192 192 static int blk_fill_sghdr_rq(struct request_queue *q, struct request *rq, 193 - struct sg_io_hdr *hdr, struct file *file) 193 + struct sg_io_hdr *hdr, fmode_t mode) 194 194 { 195 195 if (copy_from_user(rq->cmd, hdr->cmdp, hdr->cmd_len)) 196 196 return -EFAULT; 197 - if (blk_verify_command(&q->cmd_filter, rq->cmd, 198 - file->f_mode & FMODE_WRITE)) 197 + if (blk_verify_command(&q->cmd_filter, rq->cmd, mode & FMODE_WRITE)) 199 198 return -EPERM; 200 199 201 200 /* ··· 259 260 return r; 260 261 } 261 262 262 - static int sg_io(struct file *file, struct request_queue *q, 263 - struct gendisk *bd_disk, struct sg_io_hdr *hdr) 263 + static int sg_io(struct request_queue *q, struct gendisk *bd_disk, 264 + struct sg_io_hdr *hdr, fmode_t mode) 264 265 { 265 266 unsigned long start_time; 266 267 int writing = 0, ret = 0; ··· 292 293 if (!rq) 293 294 return -ENOMEM; 294 295 295 - if (blk_fill_sghdr_rq(q, rq, hdr, file)) { 296 + if (blk_fill_sghdr_rq(q, rq, hdr, mode)) { 296 297 blk_put_request(rq); 297 298 return -EFAULT; 298 299 } ··· 379 380 * bytes in one int) where the lowest byte is the SCSI status. 380 381 */ 381 382 #define OMAX_SB_LEN 16 /* For backward compatibility */ 382 - int sg_scsi_ioctl(struct file *file, struct request_queue *q, 383 - struct gendisk *disk, struct scsi_ioctl_command __user *sic) 383 + int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode, 384 + struct scsi_ioctl_command __user *sic) 384 385 { 385 386 struct request *rq; 386 - int err, write_perm = 0; 387 + int err; 387 388 unsigned int in_len, out_len, bytes, opcode, cmdlen; 388 389 char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE]; 389 390 ··· 425 426 if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len)) 426 427 goto error; 427 428 428 - /* scsi_ioctl passes NULL */ 429 - if (file && (file->f_mode & FMODE_WRITE)) 430 - write_perm = 1; 431 - 432 - err = blk_verify_command(&q->cmd_filter, rq->cmd, write_perm); 429 + err = blk_verify_command(&q->cmd_filter, rq->cmd, mode & FMODE_WRITE); 433 430 if (err) 434 431 goto error; 435 432 ··· 517 522 return __blk_send_generic(q, bd_disk, GPCMD_START_STOP_UNIT, data); 518 523 } 519 524 520 - int scsi_cmd_ioctl(struct file *file, struct request_queue *q, 521 - struct gendisk *bd_disk, unsigned int cmd, void __user *arg) 525 + int scsi_cmd_ioctl(struct request_queue *q, struct gendisk *bd_disk, fmode_t mode, 526 + unsigned int cmd, void __user *arg) 522 527 { 523 528 int err; 524 529 ··· 559 564 err = -EFAULT; 560 565 if (copy_from_user(&hdr, arg, sizeof(hdr))) 561 566 break; 562 - err = sg_io(file, q, bd_disk, &hdr); 567 + err = sg_io(q, bd_disk, &hdr, mode); 563 568 if (err == -EFAULT) 564 569 break; 565 570 ··· 607 612 hdr.cmdp = ((struct cdrom_generic_command __user*) arg)->cmd; 608 613 hdr.cmd_len = sizeof(cgc.cmd); 609 614 610 - err = sg_io(file, q, bd_disk, &hdr); 615 + err = sg_io(q, bd_disk, &hdr, mode); 611 616 if (err == -EFAULT) 612 617 break; 613 618 ··· 631 636 if (!arg) 632 637 break; 633 638 634 - err = sg_scsi_ioctl(file, q, bd_disk, arg); 639 + err = sg_scsi_ioctl(q, bd_disk, mode, arg); 635 640 break; 636 641 case CDROMCLOSETRAY: 637 642 err = blk_send_start_stop(q, bd_disk, 0x03);
+3 -3
drivers/block/DAC960.c
··· 72 72 } 73 73 } 74 74 75 - static int DAC960_open(struct inode *inode, struct file *file) 75 + static int DAC960_open(struct block_device *bdev, fmode_t mode) 76 76 { 77 - struct gendisk *disk = inode->i_bdev->bd_disk; 77 + struct gendisk *disk = bdev->bd_disk; 78 78 DAC960_Controller_T *p = disk->queue->queuedata; 79 79 int drive_nr = (long)disk->private_data; 80 80 ··· 89 89 return -ENXIO; 90 90 } 91 91 92 - check_disk_change(inode->i_bdev); 92 + check_disk_change(bdev); 93 93 94 94 if (!get_capacity(p->disks[drive_nr])) 95 95 return -ENXIO;
+24 -22
drivers/block/amiflop.c
··· 1437 1437 return 0; 1438 1438 } 1439 1439 1440 - static int fd_ioctl(struct inode *inode, struct file *filp, 1440 + static int fd_ioctl(struct block_device *bdev, fmode_t mode, 1441 1441 unsigned int cmd, unsigned long param) 1442 1442 { 1443 - int drive = iminor(inode) & 3; 1443 + struct amiga_floppy_struct *p = bdev->bd_disk->private_data; 1444 + int drive = p - unit; 1444 1445 static struct floppy_struct getprm; 1445 1446 void __user *argp = (void __user *)param; 1446 1447 ··· 1452 1451 rel_fdc(); 1453 1452 return -EBUSY; 1454 1453 } 1455 - fsync_bdev(inode->i_bdev); 1454 + fsync_bdev(bdev); 1456 1455 if (fd_motor_on(drive) == 0) { 1457 1456 rel_fdc(); 1458 1457 return -ENODEV; ··· 1465 1464 rel_fdc(); 1466 1465 break; 1467 1466 case FDFMTTRK: 1468 - if (param < unit[drive].type->tracks * unit[drive].type->heads) 1467 + if (param < p->type->tracks * p->type->heads) 1469 1468 { 1470 1469 get_fdc(drive); 1471 1470 if (fd_seek(drive,param) != 0){ 1472 - memset(unit[drive].trackbuf, FD_FILL_BYTE, 1473 - unit[drive].dtype->sects * unit[drive].type->sect_mult * 512); 1471 + memset(p->trackbuf, FD_FILL_BYTE, 1472 + p->dtype->sects * p->type->sect_mult * 512); 1474 1473 non_int_flush_track(drive); 1475 1474 } 1476 1475 floppy_off(drive); ··· 1481 1480 break; 1482 1481 case FDFMTEND: 1483 1482 floppy_off(drive); 1484 - invalidate_bdev(inode->i_bdev); 1483 + invalidate_bdev(bdev); 1485 1484 break; 1486 1485 case FDGETPRM: 1487 1486 memset((void *)&getprm, 0, sizeof (getprm)); 1488 - getprm.track=unit[drive].type->tracks; 1489 - getprm.head=unit[drive].type->heads; 1490 - getprm.sect=unit[drive].dtype->sects * unit[drive].type->sect_mult; 1491 - getprm.size=unit[drive].blocks; 1487 + getprm.track=p->type->tracks; 1488 + getprm.head=p->type->heads; 1489 + getprm.sect=p->dtype->sects * p->type->sect_mult; 1490 + getprm.size=p->blocks; 1492 1491 if (copy_to_user(argp, &getprm, sizeof(struct floppy_struct))) 1493 1492 return -EFAULT; 1494 1493 break; ··· 1501 1500 break; 1502 1501 #ifdef RAW_IOCTL 1503 1502 case IOCTL_RAW_TRACK: 1504 - if (copy_to_user(argp, raw_buf, unit[drive].type->read_size)) 1503 + if (copy_to_user(argp, raw_buf, p->type->read_size)) 1505 1504 return -EFAULT; 1506 1505 else 1507 - return unit[drive].type->read_size; 1506 + return p->type->read_size; 1508 1507 #endif 1509 1508 default: 1510 1509 printk(KERN_DEBUG "fd_ioctl: unknown cmd %d for drive %d.", ··· 1549 1548 * /dev/PS0 etc), and disallows simultaneous access to the same 1550 1549 * drive with different device numbers. 1551 1550 */ 1552 - static int floppy_open(struct inode *inode, struct file *filp) 1551 + static int floppy_open(struct block_device *bdev, fmode_t mode) 1553 1552 { 1554 - int drive = iminor(inode) & 3; 1555 - int system = (iminor(inode) & 4) >> 2; 1553 + int drive = MINOR(bdev->bd_dev) & 3; 1554 + int system = (MINOR(bdev->bd_dev) & 4) >> 2; 1556 1555 int old_dev; 1557 1556 unsigned long flags; 1558 1557 ··· 1561 1560 if (fd_ref[drive] && old_dev != system) 1562 1561 return -EBUSY; 1563 1562 1564 - if (filp && filp->f_mode & 3) { 1565 - check_disk_change(inode->i_bdev); 1566 - if (filp->f_mode & 2 ) { 1563 + if (mode & (FMODE_READ|FMODE_WRITE)) { 1564 + check_disk_change(bdev); 1565 + if (mode & FMODE_WRITE) { 1567 1566 int wrprot; 1568 1567 1569 1568 get_fdc(drive); ··· 1593 1592 return 0; 1594 1593 } 1595 1594 1596 - static int floppy_release(struct inode * inode, struct file * filp) 1595 + static int floppy_release(struct gendisk *disk, fmode_t mode) 1597 1596 { 1598 - int drive = iminor(inode) & 3; 1597 + struct amiga_floppy_struct *p = disk->private_data; 1598 + int drive = p - unit; 1599 1599 1600 1600 if (unit[drive].dirty == 1) { 1601 1601 del_timer (flush_track_timer + drive); ··· 1652 1650 .owner = THIS_MODULE, 1653 1651 .open = floppy_open, 1654 1652 .release = floppy_release, 1655 - .ioctl = fd_ioctl, 1653 + .locked_ioctl = fd_ioctl, 1656 1654 .getgeo = fd_getgeo, 1657 1655 .media_changed = amiga_floppy_change, 1658 1656 };
+4 -8
drivers/block/aoe/aoeblk.c
··· 118 118 } 119 119 120 120 static int 121 - aoeblk_open(struct inode *inode, struct file *filp) 121 + aoeblk_open(struct block_device *bdev, fmode_t mode) 122 122 { 123 - struct aoedev *d; 123 + struct aoedev *d = bdev->bd_disk->private_data; 124 124 ulong flags; 125 - 126 - d = inode->i_bdev->bd_disk->private_data; 127 125 128 126 spin_lock_irqsave(&d->lock, flags); 129 127 if (d->flags & DEVFL_UP) { ··· 134 136 } 135 137 136 138 static int 137 - aoeblk_release(struct inode *inode, struct file *filp) 139 + aoeblk_release(struct gendisk *disk, fmode_t mode) 138 140 { 139 - struct aoedev *d; 141 + struct aoedev *d = disk->private_data; 140 142 ulong flags; 141 - 142 - d = inode->i_bdev->bd_disk->private_data; 143 143 144 144 spin_lock_irqsave(&d->lock, flags); 145 145
+18 -19
drivers/block/ataflop.c
··· 361 361 static void finish_fdc_done( int dummy ); 362 362 static void setup_req_params( int drive ); 363 363 static void redo_fd_request( void); 364 - static int fd_ioctl( struct inode *inode, struct file *filp, unsigned int 364 + static int fd_ioctl(struct block_device *bdev, fmode_t mode, unsigned int 365 365 cmd, unsigned long param); 366 366 static void fd_probe( int drive ); 367 367 static int fd_test_drive_present( int drive ); 368 368 static void config_types( void ); 369 - static int floppy_open( struct inode *inode, struct file *filp ); 370 - static int floppy_release( struct inode * inode, struct file * filp ); 369 + static int floppy_open(struct block_device *bdev, fmode_t mode); 370 + static int floppy_release(struct gendisk *disk, fmode_t mode); 371 371 372 372 /************************* End of Prototypes **************************/ 373 373 ··· 1483 1483 atari_enable_irq( IRQ_MFP_FDC ); 1484 1484 } 1485 1485 1486 - static int fd_ioctl(struct inode *inode, struct file *filp, 1486 + static int fd_ioctl(struct block_device *bdev, fmode_t mode, 1487 1487 unsigned int cmd, unsigned long param) 1488 1488 { 1489 - struct gendisk *disk = inode->i_bdev->bd_disk; 1489 + struct gendisk *disk = bdev->bd_disk; 1490 1490 struct atari_floppy_struct *floppy = disk->private_data; 1491 1491 int drive = floppy - unit; 1492 1492 int type = floppy->type; ··· 1661 1661 /* invalidate the buffer track to force a reread */ 1662 1662 BufferDrive = -1; 1663 1663 set_bit(drive, &fake_change); 1664 - check_disk_change(inode->i_bdev); 1664 + check_disk_change(bdev); 1665 1665 return 0; 1666 1666 default: 1667 1667 return -EINVAL; ··· 1804 1804 * drive with different device numbers. 1805 1805 */ 1806 1806 1807 - static int floppy_open( struct inode *inode, struct file *filp ) 1807 + static int floppy_open(struct block_device *bdev, fmode_t mode) 1808 1808 { 1809 - struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data; 1810 - int type = iminor(inode) >> 2; 1809 + struct atari_floppy_struct *p = bdev->bd_disk->private_data; 1810 + int type = MINOR(bdev->bd_dev) >> 2; 1811 1811 1812 1812 DPRINT(("fd_open: type=%d\n",type)); 1813 1813 if (p->ref && p->type != type) 1814 1814 return -EBUSY; 1815 1815 1816 - if (p->ref == -1 || (p->ref && filp->f_flags & O_EXCL)) 1816 + if (p->ref == -1 || (p->ref && mode & FMODE_EXCL)) 1817 1817 return -EBUSY; 1818 1818 1819 - if (filp->f_flags & O_EXCL) 1819 + if (mode & FMODE_EXCL) 1820 1820 p->ref = -1; 1821 1821 else 1822 1822 p->ref++; 1823 1823 1824 1824 p->type = type; 1825 1825 1826 - if (filp->f_flags & O_NDELAY) 1826 + if (mode & FMODE_NDELAY) 1827 1827 return 0; 1828 1828 1829 - if (filp->f_mode & 3) { 1830 - check_disk_change(inode->i_bdev); 1831 - if (filp->f_mode & 2) { 1829 + if (mode & (FMODE_READ|FMODE_WRITE)) { 1830 + check_disk_change(bdev); 1831 + if (mode & FMODE_WRITE) { 1832 1832 if (p->wpstat) { 1833 1833 if (p->ref < 0) 1834 1834 p->ref = 0; 1835 1835 else 1836 1836 p->ref--; 1837 - floppy_release(inode, filp); 1838 1837 return -EROFS; 1839 1838 } 1840 1839 } ··· 1842 1843 } 1843 1844 1844 1845 1845 - static int floppy_release( struct inode * inode, struct file * filp ) 1846 + static int floppy_release(struct gendisk *disk, fmode_t mode) 1846 1847 { 1847 - struct atari_floppy_struct *p = inode->i_bdev->bd_disk->private_data; 1848 + struct atari_floppy_struct *p = disk->private_data; 1848 1849 if (p->ref < 0) 1849 1850 p->ref = 0; 1850 1851 else if (!p->ref--) { ··· 1858 1859 .owner = THIS_MODULE, 1859 1860 .open = floppy_open, 1860 1861 .release = floppy_release, 1861 - .ioctl = fd_ioctl, 1862 + .locked_ioctl = fd_ioctl, 1862 1863 .media_changed = check_floppy_change, 1863 1864 .revalidate_disk= floppy_revalidate, 1864 1865 };
+2 -3
drivers/block/brd.c
··· 340 340 } 341 341 #endif 342 342 343 - static int brd_ioctl(struct inode *inode, struct file *file, 343 + static int brd_ioctl(struct block_device *bdev, fmode_t mode, 344 344 unsigned int cmd, unsigned long arg) 345 345 { 346 346 int error; 347 - struct block_device *bdev = inode->i_bdev; 348 347 struct brd_device *brd = bdev->bd_disk->private_data; 349 348 350 349 if (cmd != BLKFLSBUF) ··· 375 376 376 377 static struct block_device_operations brd_fops = { 377 378 .owner = THIS_MODULE, 378 - .ioctl = brd_ioctl, 379 + .locked_ioctl = brd_ioctl, 379 380 #ifdef CONFIG_BLK_DEV_XIP 380 381 .direct_access = brd_direct_access, 381 382 #endif
+36 -35
drivers/block/cciss.c
··· 152 152 153 153 static void do_cciss_request(struct request_queue *q); 154 154 static irqreturn_t do_cciss_intr(int irq, void *dev_id); 155 - static int cciss_open(struct inode *inode, struct file *filep); 156 - static int cciss_release(struct inode *inode, struct file *filep); 157 - static int cciss_ioctl(struct inode *inode, struct file *filep, 155 + static int cciss_open(struct block_device *bdev, fmode_t mode); 156 + static int cciss_release(struct gendisk *disk, fmode_t mode); 157 + static int cciss_ioctl(struct block_device *bdev, fmode_t mode, 158 158 unsigned int cmd, unsigned long arg); 159 159 static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo); 160 160 ··· 192 192 #endif /* CONFIG_PROC_FS */ 193 193 194 194 #ifdef CONFIG_COMPAT 195 - static long cciss_compat_ioctl(struct file *f, unsigned cmd, unsigned long arg); 195 + static int cciss_compat_ioctl(struct block_device *, fmode_t, 196 + unsigned, unsigned long); 196 197 #endif 197 198 198 199 static struct block_device_operations cciss_fops = { 199 200 .owner = THIS_MODULE, 200 201 .open = cciss_open, 201 202 .release = cciss_release, 202 - .ioctl = cciss_ioctl, 203 + .locked_ioctl = cciss_ioctl, 203 204 .getgeo = cciss_getgeo, 204 205 #ifdef CONFIG_COMPAT 205 206 .compat_ioctl = cciss_compat_ioctl, ··· 548 547 /* 549 548 * Open. Make sure the device is really there. 550 549 */ 551 - static int cciss_open(struct inode *inode, struct file *filep) 550 + static int cciss_open(struct block_device *bdev, fmode_t mode) 552 551 { 553 - ctlr_info_t *host = get_host(inode->i_bdev->bd_disk); 554 - drive_info_struct *drv = get_drv(inode->i_bdev->bd_disk); 552 + ctlr_info_t *host = get_host(bdev->bd_disk); 553 + drive_info_struct *drv = get_drv(bdev->bd_disk); 555 554 556 555 #ifdef CCISS_DEBUG 557 - printk(KERN_DEBUG "cciss_open %s\n", inode->i_bdev->bd_disk->disk_name); 556 + printk(KERN_DEBUG "cciss_open %s\n", bdev->bd_disk->disk_name); 558 557 #endif /* CCISS_DEBUG */ 559 558 560 559 if (host->busy_initializing || drv->busy_configuring) ··· 568 567 * for "raw controller". 569 568 */ 570 569 if (drv->heads == 0) { 571 - if (iminor(inode) != 0) { /* not node 0? */ 570 + if (MINOR(bdev->bd_dev) != 0) { /* not node 0? */ 572 571 /* if not node 0 make sure it is a partition = 0 */ 573 - if (iminor(inode) & 0x0f) { 572 + if (MINOR(bdev->bd_dev) & 0x0f) { 574 573 return -ENXIO; 575 574 /* if it is, make sure we have a LUN ID */ 576 575 } else if (drv->LunID == 0) { ··· 588 587 /* 589 588 * Close. Sync first. 590 589 */ 591 - static int cciss_release(struct inode *inode, struct file *filep) 590 + static int cciss_release(struct gendisk *disk, fmode_t mode) 592 591 { 593 - ctlr_info_t *host = get_host(inode->i_bdev->bd_disk); 594 - drive_info_struct *drv = get_drv(inode->i_bdev->bd_disk); 592 + ctlr_info_t *host = get_host(disk); 593 + drive_info_struct *drv = get_drv(disk); 595 594 596 595 #ifdef CCISS_DEBUG 597 - printk(KERN_DEBUG "cciss_release %s\n", 598 - inode->i_bdev->bd_disk->disk_name); 596 + printk(KERN_DEBUG "cciss_release %s\n", disk->disk_name); 599 597 #endif /* CCISS_DEBUG */ 600 598 601 599 drv->usage_count--; ··· 604 604 605 605 #ifdef CONFIG_COMPAT 606 606 607 - static int do_ioctl(struct file *f, unsigned cmd, unsigned long arg) 607 + static int do_ioctl(struct block_device *bdev, fmode_t mode, 608 + unsigned cmd, unsigned long arg) 608 609 { 609 610 int ret; 610 611 lock_kernel(); 611 - ret = cciss_ioctl(f->f_path.dentry->d_inode, f, cmd, arg); 612 + ret = cciss_ioctl(bdev, mode, cmd, arg); 612 613 unlock_kernel(); 613 614 return ret; 614 615 } 615 616 616 - static int cciss_ioctl32_passthru(struct file *f, unsigned cmd, 617 - unsigned long arg); 618 - static int cciss_ioctl32_big_passthru(struct file *f, unsigned cmd, 619 - unsigned long arg); 617 + static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode, 618 + unsigned cmd, unsigned long arg); 619 + static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode, 620 + unsigned cmd, unsigned long arg); 620 621 621 - static long cciss_compat_ioctl(struct file *f, unsigned cmd, unsigned long arg) 622 + static int cciss_compat_ioctl(struct block_device *bdev, fmode_t mode, 623 + unsigned cmd, unsigned long arg) 622 624 { 623 625 switch (cmd) { 624 626 case CCISS_GETPCIINFO: ··· 638 636 case CCISS_REGNEWD: 639 637 case CCISS_RESCANDISK: 640 638 case CCISS_GETLUNINFO: 641 - return do_ioctl(f, cmd, arg); 639 + return do_ioctl(bdev, mode, cmd, arg); 642 640 643 641 case CCISS_PASSTHRU32: 644 - return cciss_ioctl32_passthru(f, cmd, arg); 642 + return cciss_ioctl32_passthru(bdev, mode, cmd, arg); 645 643 case CCISS_BIG_PASSTHRU32: 646 - return cciss_ioctl32_big_passthru(f, cmd, arg); 644 + return cciss_ioctl32_big_passthru(bdev, mode, cmd, arg); 647 645 648 646 default: 649 647 return -ENOIOCTLCMD; 650 648 } 651 649 } 652 650 653 - static int cciss_ioctl32_passthru(struct file *f, unsigned cmd, 654 - unsigned long arg) 651 + static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode, 652 + unsigned cmd, unsigned long arg) 655 653 { 656 654 IOCTL32_Command_struct __user *arg32 = 657 655 (IOCTL32_Command_struct __user *) arg; ··· 678 676 if (err) 679 677 return -EFAULT; 680 678 681 - err = do_ioctl(f, CCISS_PASSTHRU, (unsigned long)p); 679 + err = do_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p); 682 680 if (err) 683 681 return err; 684 682 err |= ··· 689 687 return err; 690 688 } 691 689 692 - static int cciss_ioctl32_big_passthru(struct file *file, unsigned cmd, 693 - unsigned long arg) 690 + static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode, 691 + unsigned cmd, unsigned long arg) 694 692 { 695 693 BIG_IOCTL32_Command_struct __user *arg32 = 696 694 (BIG_IOCTL32_Command_struct __user *) arg; ··· 719 717 if (err) 720 718 return -EFAULT; 721 719 722 - err = do_ioctl(file, CCISS_BIG_PASSTHRU, (unsigned long)p); 720 + err = do_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p); 723 721 if (err) 724 722 return err; 725 723 err |= ··· 747 745 /* 748 746 * ioctl 749 747 */ 750 - static int cciss_ioctl(struct inode *inode, struct file *filep, 748 + static int cciss_ioctl(struct block_device *bdev, fmode_t mode, 751 749 unsigned int cmd, unsigned long arg) 752 750 { 753 - struct block_device *bdev = inode->i_bdev; 754 751 struct gendisk *disk = bdev->bd_disk; 755 752 ctlr_info_t *host = get_host(disk); 756 753 drive_info_struct *drv = get_drv(disk); ··· 1233 1232 case SG_EMULATED_HOST: 1234 1233 case SG_IO: 1235 1234 case SCSI_IOCTL_SEND_COMMAND: 1236 - return scsi_cmd_ioctl(filep, disk->queue, disk, cmd, argp); 1235 + return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); 1237 1236 1238 1237 /* scsi_cmd_ioctl would normally handle these, below, but */ 1239 1238 /* they aren't a good fit for cciss, as CD-ROMs are */
+14 -14
drivers/block/cpqarray.c
··· 156 156 unsigned int blkcnt, 157 157 unsigned int log_unit ); 158 158 159 - static int ida_open(struct inode *inode, struct file *filep); 160 - static int ida_release(struct inode *inode, struct file *filep); 161 - static int ida_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg); 159 + static int ida_open(struct block_device *bdev, fmode_t mode); 160 + static int ida_release(struct gendisk *disk, fmode_t mode); 161 + static int ida_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); 162 162 static int ida_getgeo(struct block_device *bdev, struct hd_geometry *geo); 163 163 static int ida_ctlr_ioctl(ctlr_info_t *h, int dsk, ida_ioctl_t *io); 164 164 ··· 197 197 .owner = THIS_MODULE, 198 198 .open = ida_open, 199 199 .release = ida_release, 200 - .ioctl = ida_ioctl, 200 + .locked_ioctl = ida_ioctl, 201 201 .getgeo = ida_getgeo, 202 202 .revalidate_disk= ida_revalidate, 203 203 }; ··· 818 818 /* 819 819 * Open. Make sure the device is really there. 820 820 */ 821 - static int ida_open(struct inode *inode, struct file *filep) 821 + static int ida_open(struct block_device *bdev, fmode_t mode) 822 822 { 823 - drv_info_t *drv = get_drv(inode->i_bdev->bd_disk); 824 - ctlr_info_t *host = get_host(inode->i_bdev->bd_disk); 823 + drv_info_t *drv = get_drv(bdev->bd_disk); 824 + ctlr_info_t *host = get_host(bdev->bd_disk); 825 825 826 - DBGINFO(printk("ida_open %s\n", inode->i_bdev->bd_disk->disk_name)); 826 + DBGINFO(printk("ida_open %s\n", bdev->bd_disk->disk_name)); 827 827 /* 828 828 * Root is allowed to open raw volume zero even if it's not configured 829 829 * so array config can still work. I don't think I really like this, ··· 843 843 /* 844 844 * Close. Sync first. 845 845 */ 846 - static int ida_release(struct inode *inode, struct file *filep) 846 + static int ida_release(struct gendisk *disk, fmode_t mode) 847 847 { 848 - ctlr_info_t *host = get_host(inode->i_bdev->bd_disk); 848 + ctlr_info_t *host = get_host(disk); 849 849 host->usage_count--; 850 850 return 0; 851 851 } ··· 1128 1128 * ida_ioctl does some miscellaneous stuff like reporting drive geometry, 1129 1129 * setting readahead and submitting commands from userspace to the controller. 1130 1130 */ 1131 - static int ida_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg) 1131 + static int ida_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) 1132 1132 { 1133 - drv_info_t *drv = get_drv(inode->i_bdev->bd_disk); 1134 - ctlr_info_t *host = get_host(inode->i_bdev->bd_disk); 1133 + drv_info_t *drv = get_drv(bdev->bd_disk); 1134 + ctlr_info_t *host = get_host(bdev->bd_disk); 1135 1135 int error; 1136 1136 ida_ioctl_t __user *io = (ida_ioctl_t __user *)arg; 1137 1137 ida_ioctl_t *my_io; ··· 1165 1165 put_user(host->ctlr_sig, (int __user *)arg); 1166 1166 return 0; 1167 1167 case IDAREVALIDATEVOLS: 1168 - if (iminor(inode) != 0) 1168 + if (MINOR(bdev->bd_dev) != 0) 1169 1169 return -ENXIO; 1170 1170 return revalidate_allvol(host); 1171 1171 case IDADRIVERVERSION:
+24 -30
drivers/block/floppy.c
··· 3450 3450 return 0; 3451 3451 } 3452 3452 3453 - static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, 3453 + static int fd_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, 3454 3454 unsigned long param) 3455 3455 { 3456 - #define FD_IOCTL_ALLOWED ((filp) && (filp)->private_data) 3456 + #define FD_IOCTL_ALLOWED (mode & (FMODE_WRITE|FMODE_WRITE_IOCTL)) 3457 3457 #define OUT(c,x) case c: outparam = (const char *) (x); break 3458 3458 #define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0 3459 3459 3460 - int drive = (long)inode->i_bdev->bd_disk->private_data; 3460 + int drive = (long)bdev->bd_disk->private_data; 3461 3461 int type = ITYPE(UDRS->fd_device); 3462 3462 int i; 3463 3463 int ret; ··· 3516 3516 current_type[drive] = NULL; 3517 3517 floppy_sizes[drive] = MAX_DISK_SIZE << 1; 3518 3518 UDRS->keep_data = 0; 3519 - return invalidate_drive(inode->i_bdev); 3519 + return invalidate_drive(bdev); 3520 3520 case FDSETPRM: 3521 3521 case FDDEFPRM: 3522 3522 return set_geometry(cmd, &inparam.g, 3523 - drive, type, inode->i_bdev); 3523 + drive, type, bdev); 3524 3524 case FDGETPRM: 3525 3525 ECALL(get_floppy_geometry(drive, type, 3526 3526 (struct floppy_struct **) ··· 3551 3551 case FDFMTEND: 3552 3552 case FDFLUSH: 3553 3553 LOCK_FDC(drive, 1); 3554 - return invalidate_drive(inode->i_bdev); 3554 + return invalidate_drive(bdev); 3555 3555 3556 3556 case FDSETEMSGTRESH: 3557 3557 UDP->max_errors.reporting = ··· 3659 3659 printk("\n"); 3660 3660 } 3661 3661 3662 - static int floppy_release(struct inode *inode, struct file *filp) 3662 + static int floppy_release(struct gendisk *disk, fmode_t mode) 3663 3663 { 3664 - int drive = (long)inode->i_bdev->bd_disk->private_data; 3664 + int drive = (long)disk->private_data; 3665 3665 3666 3666 mutex_lock(&open_lock); 3667 3667 if (UDRS->fd_ref < 0) ··· 3682 3682 * /dev/PS0 etc), and disallows simultaneous access to the same 3683 3683 * drive with different device numbers. 3684 3684 */ 3685 - static int floppy_open(struct inode *inode, struct file *filp) 3685 + static int floppy_open(struct block_device *bdev, fmode_t mode) 3686 3686 { 3687 - int drive = (long)inode->i_bdev->bd_disk->private_data; 3688 - int old_dev; 3687 + int drive = (long)bdev->bd_disk->private_data; 3688 + int old_dev, new_dev; 3689 3689 int try; 3690 3690 int res = -EBUSY; 3691 3691 char *tmp; 3692 3692 3693 - filp->private_data = (void *)0; 3694 3693 mutex_lock(&open_lock); 3695 3694 old_dev = UDRS->fd_device; 3696 - if (opened_bdev[drive] && opened_bdev[drive] != inode->i_bdev) 3695 + if (opened_bdev[drive] && opened_bdev[drive] != bdev) 3697 3696 goto out2; 3698 3697 3699 3698 if (!UDRS->fd_ref && (UDP->flags & FD_BROKEN_DCL)) { ··· 3700 3701 USETF(FD_VERIFY); 3701 3702 } 3702 3703 3703 - if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL))) 3704 + if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (mode & FMODE_EXCL))) 3704 3705 goto out2; 3705 3706 3706 - if (filp->f_flags & O_EXCL) 3707 + if (mode & FMODE_EXCL) 3707 3708 UDRS->fd_ref = -1; 3708 3709 else 3709 3710 UDRS->fd_ref++; 3710 3711 3711 - opened_bdev[drive] = inode->i_bdev; 3712 + opened_bdev[drive] = bdev; 3712 3713 3713 3714 res = -ENXIO; 3714 3715 ··· 3743 3744 } 3744 3745 } 3745 3746 3746 - UDRS->fd_device = iminor(inode); 3747 - set_capacity(disks[drive], floppy_sizes[iminor(inode)]); 3748 - if (old_dev != -1 && old_dev != iminor(inode)) { 3747 + new_dev = MINOR(bdev->bd_dev); 3748 + UDRS->fd_device = new_dev; 3749 + set_capacity(disks[drive], floppy_sizes[new_dev]); 3750 + if (old_dev != -1 && old_dev != new_dev) { 3749 3751 if (buffer_drive == drive) 3750 3752 buffer_track = -1; 3751 3753 } 3752 3754 3753 - /* Allow ioctls if we have write-permissions even if read-only open. 3754 - * Needed so that programs such as fdrawcmd still can work on write 3755 - * protected disks */ 3756 - if ((filp->f_mode & FMODE_WRITE) || !file_permission(filp, MAY_WRITE)) 3757 - filp->private_data = (void *)8; 3758 - 3759 3755 if (UFDCS->rawcmd == 1) 3760 3756 UFDCS->rawcmd = 2; 3761 3757 3762 - if (!(filp->f_flags & O_NDELAY)) { 3763 - if (filp->f_mode & 3) { 3758 + if (!(mode & FMODE_NDELAY)) { 3759 + if (mode & (FMODE_READ|FMODE_WRITE)) { 3764 3760 UDRS->last_checked = 0; 3765 - check_disk_change(inode->i_bdev); 3761 + check_disk_change(bdev); 3766 3762 if (UTESTF(FD_DISK_CHANGED)) 3767 3763 goto out; 3768 3764 } 3769 3765 res = -EROFS; 3770 - if ((filp->f_mode & 2) && !(UTESTF(FD_DISK_WRITABLE))) 3766 + if ((mode & FMODE_WRITE) && !(UTESTF(FD_DISK_WRITABLE))) 3771 3767 goto out; 3772 3768 } 3773 3769 mutex_unlock(&open_lock); ··· 3905 3911 .owner = THIS_MODULE, 3906 3912 .open = floppy_open, 3907 3913 .release = floppy_release, 3908 - .ioctl = fd_ioctl, 3914 + .locked_ioctl = fd_ioctl, 3909 3915 .getgeo = fd_getgeo, 3910 3916 .media_changed = check_floppy_change, 3911 3917 .revalidate_disk = floppy_revalidate,
+30 -29
drivers/block/loop.c
··· 210 210 * space operations write_begin and write_end. 211 211 */ 212 212 static int do_lo_send_aops(struct loop_device *lo, struct bio_vec *bvec, 213 - int bsize, loff_t pos, struct page *unused) 213 + loff_t pos, struct page *unused) 214 214 { 215 215 struct file *file = lo->lo_backing_file; /* kudos to NFsckingS */ 216 216 struct address_space *mapping = file->f_mapping; ··· 302 302 * filesystems. 303 303 */ 304 304 static int do_lo_send_direct_write(struct loop_device *lo, 305 - struct bio_vec *bvec, int bsize, loff_t pos, struct page *page) 305 + struct bio_vec *bvec, loff_t pos, struct page *page) 306 306 { 307 307 ssize_t bw = __do_lo_send_write(lo->lo_backing_file, 308 308 kmap(bvec->bv_page) + bvec->bv_offset, ··· 326 326 * destination pages of the backing file. 327 327 */ 328 328 static int do_lo_send_write(struct loop_device *lo, struct bio_vec *bvec, 329 - int bsize, loff_t pos, struct page *page) 329 + loff_t pos, struct page *page) 330 330 { 331 331 int ret = lo_do_transfer(lo, WRITE, page, 0, bvec->bv_page, 332 332 bvec->bv_offset, bvec->bv_len, pos >> 9); ··· 341 341 return ret; 342 342 } 343 343 344 - static int lo_send(struct loop_device *lo, struct bio *bio, int bsize, 345 - loff_t pos) 344 + static int lo_send(struct loop_device *lo, struct bio *bio, loff_t pos) 346 345 { 347 - int (*do_lo_send)(struct loop_device *, struct bio_vec *, int, loff_t, 346 + int (*do_lo_send)(struct loop_device *, struct bio_vec *, loff_t, 348 347 struct page *page); 349 348 struct bio_vec *bvec; 350 349 struct page *page = NULL; ··· 361 362 } 362 363 } 363 364 bio_for_each_segment(bvec, bio, i) { 364 - ret = do_lo_send(lo, bvec, bsize, pos, page); 365 + ret = do_lo_send(lo, bvec, pos, page); 365 366 if (ret < 0) 366 367 break; 367 368 pos += bvec->bv_len; ··· 477 478 478 479 pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset; 479 480 if (bio_rw(bio) == WRITE) 480 - ret = lo_send(lo, bio, lo->lo_blocksize, pos); 481 + ret = lo_send(lo, bio, pos); 481 482 else 482 483 ret = lo_receive(lo, bio, lo->lo_blocksize, pos); 483 484 return ret; ··· 651 652 * This can only work if the loop device is used read-only, and if the 652 653 * new backing store is the same size and type as the old backing store. 653 654 */ 654 - static int loop_change_fd(struct loop_device *lo, struct file *lo_file, 655 - struct block_device *bdev, unsigned int arg) 655 + static int loop_change_fd(struct loop_device *lo, struct block_device *bdev, 656 + unsigned int arg) 656 657 { 657 658 struct file *file, *old_file; 658 659 struct inode *inode; ··· 711 712 return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR; 712 713 } 713 714 714 - static int loop_set_fd(struct loop_device *lo, struct file *lo_file, 715 + static int loop_set_fd(struct loop_device *lo, fmode_t mode, 715 716 struct block_device *bdev, unsigned int arg) 716 717 { 717 718 struct file *file, *f; ··· 739 740 while (is_loop_device(f)) { 740 741 struct loop_device *l; 741 742 742 - if (f->f_mapping->host->i_rdev == lo_file->f_mapping->host->i_rdev) 743 + if (f->f_mapping->host->i_bdev == bdev) 743 744 goto out_putf; 744 745 745 746 l = f->f_mapping->host->i_bdev->bd_disk->private_data; ··· 785 786 goto out_putf; 786 787 } 787 788 788 - if (!(lo_file->f_mode & FMODE_WRITE)) 789 + if (!(mode & FMODE_WRITE)) 789 790 lo_flags |= LO_FLAGS_READ_ONLY; 790 791 791 792 set_device_ro(bdev, (lo_flags & LO_FLAGS_READ_ONLY) != 0); ··· 917 918 memset(lo->lo_encrypt_key, 0, LO_KEY_SIZE); 918 919 memset(lo->lo_crypt_name, 0, LO_NAME_SIZE); 919 920 memset(lo->lo_file_name, 0, LO_NAME_SIZE); 920 - invalidate_bdev(bdev); 921 + if (bdev) 922 + invalidate_bdev(bdev); 921 923 set_capacity(lo->lo_disk, 0); 922 - bd_set_size(bdev, 0); 924 + if (bdev) 925 + bd_set_size(bdev, 0); 923 926 mapping_set_gfp_mask(filp->f_mapping, gfp); 924 927 lo->lo_state = Lo_unbound; 925 928 fput(filp); ··· 1138 1137 return err; 1139 1138 } 1140 1139 1141 - static int lo_ioctl(struct inode * inode, struct file * file, 1140 + static int lo_ioctl(struct block_device *bdev, fmode_t mode, 1142 1141 unsigned int cmd, unsigned long arg) 1143 1142 { 1144 - struct loop_device *lo = inode->i_bdev->bd_disk->private_data; 1143 + struct loop_device *lo = bdev->bd_disk->private_data; 1145 1144 int err; 1146 1145 1147 1146 mutex_lock(&lo->lo_ctl_mutex); 1148 1147 switch (cmd) { 1149 1148 case LOOP_SET_FD: 1150 - err = loop_set_fd(lo, file, inode->i_bdev, arg); 1149 + err = loop_set_fd(lo, mode, bdev, arg); 1151 1150 break; 1152 1151 case LOOP_CHANGE_FD: 1153 - err = loop_change_fd(lo, file, inode->i_bdev, arg); 1152 + err = loop_change_fd(lo, bdev, arg); 1154 1153 break; 1155 1154 case LOOP_CLR_FD: 1156 - err = loop_clr_fd(lo, inode->i_bdev); 1155 + err = loop_clr_fd(lo, bdev); 1157 1156 break; 1158 1157 case LOOP_SET_STATUS: 1159 1158 err = loop_set_status_old(lo, (struct loop_info __user *) arg); ··· 1293 1292 return err; 1294 1293 } 1295 1294 1296 - static long lo_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 1295 + static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode, 1296 + unsigned int cmd, unsigned long arg) 1297 1297 { 1298 - struct inode *inode = file->f_path.dentry->d_inode; 1299 - struct loop_device *lo = inode->i_bdev->bd_disk->private_data; 1298 + struct loop_device *lo = bdev->bd_disk->private_data; 1300 1299 int err; 1301 1300 1302 1301 switch(cmd) { ··· 1318 1317 arg = (unsigned long) compat_ptr(arg); 1319 1318 case LOOP_SET_FD: 1320 1319 case LOOP_CHANGE_FD: 1321 - err = lo_ioctl(inode, file, cmd, arg); 1320 + err = lo_ioctl(bdev, mode, cmd, arg); 1322 1321 break; 1323 1322 default: 1324 1323 err = -ENOIOCTLCMD; ··· 1328 1327 } 1329 1328 #endif 1330 1329 1331 - static int lo_open(struct inode *inode, struct file *file) 1330 + static int lo_open(struct block_device *bdev, fmode_t mode) 1332 1331 { 1333 - struct loop_device *lo = inode->i_bdev->bd_disk->private_data; 1332 + struct loop_device *lo = bdev->bd_disk->private_data; 1334 1333 1335 1334 mutex_lock(&lo->lo_ctl_mutex); 1336 1335 lo->lo_refcnt++; ··· 1339 1338 return 0; 1340 1339 } 1341 1340 1342 - static int lo_release(struct inode *inode, struct file *file) 1341 + static int lo_release(struct gendisk *disk, fmode_t mode) 1343 1342 { 1344 - struct loop_device *lo = inode->i_bdev->bd_disk->private_data; 1343 + struct loop_device *lo = disk->private_data; 1345 1344 1346 1345 mutex_lock(&lo->lo_ctl_mutex); 1347 1346 --lo->lo_refcnt; 1348 1347 1349 1348 if ((lo->lo_flags & LO_FLAGS_AUTOCLEAR) && !lo->lo_refcnt) 1350 - loop_clr_fd(lo, inode->i_bdev); 1349 + loop_clr_fd(lo, NULL); 1351 1350 1352 1351 mutex_unlock(&lo->lo_ctl_mutex); 1353 1352
+14 -14
drivers/block/nbd.c
··· 557 557 } 558 558 } 559 559 560 - static int nbd_ioctl(struct inode *inode, struct file *file, 560 + static int nbd_ioctl(struct block_device *bdev, fmode_t mode, 561 561 unsigned int cmd, unsigned long arg) 562 562 { 563 - struct nbd_device *lo = inode->i_bdev->bd_disk->private_data; 563 + struct nbd_device *lo = bdev->bd_disk->private_data; 564 + struct file *file; 564 565 int error; 565 566 struct request sreq ; 566 567 struct task_struct *thread; ··· 613 612 error = -EINVAL; 614 613 file = fget(arg); 615 614 if (file) { 616 - struct block_device *bdev = inode->i_bdev; 617 - inode = file->f_path.dentry->d_inode; 615 + struct inode *inode = file->f_path.dentry->d_inode; 618 616 if (S_ISSOCK(inode->i_mode)) { 619 617 lo->file = file; 620 618 lo->sock = SOCKET_I(inode); ··· 628 628 case NBD_SET_BLKSIZE: 629 629 lo->blksize = arg; 630 630 lo->bytesize &= ~(lo->blksize-1); 631 - inode->i_bdev->bd_inode->i_size = lo->bytesize; 632 - set_blocksize(inode->i_bdev, lo->blksize); 631 + bdev->bd_inode->i_size = lo->bytesize; 632 + set_blocksize(bdev, lo->blksize); 633 633 set_capacity(lo->disk, lo->bytesize >> 9); 634 634 return 0; 635 635 case NBD_SET_SIZE: 636 636 lo->bytesize = arg & ~(lo->blksize-1); 637 - inode->i_bdev->bd_inode->i_size = lo->bytesize; 638 - set_blocksize(inode->i_bdev, lo->blksize); 637 + bdev->bd_inode->i_size = lo->bytesize; 638 + set_blocksize(bdev, lo->blksize); 639 639 set_capacity(lo->disk, lo->bytesize >> 9); 640 640 return 0; 641 641 case NBD_SET_TIMEOUT: ··· 643 643 return 0; 644 644 case NBD_SET_SIZE_BLOCKS: 645 645 lo->bytesize = ((u64) arg) * lo->blksize; 646 - inode->i_bdev->bd_inode->i_size = lo->bytesize; 647 - set_blocksize(inode->i_bdev, lo->blksize); 646 + bdev->bd_inode->i_size = lo->bytesize; 647 + set_blocksize(bdev, lo->blksize); 648 648 set_capacity(lo->disk, lo->bytesize >> 9); 649 649 return 0; 650 650 case NBD_DO_IT: ··· 666 666 if (file) 667 667 fput(file); 668 668 lo->bytesize = 0; 669 - inode->i_bdev->bd_inode->i_size = 0; 669 + bdev->bd_inode->i_size = 0; 670 670 set_capacity(lo->disk, 0); 671 671 if (max_part > 0) 672 - ioctl_by_bdev(inode->i_bdev, BLKRRPART, 0); 672 + ioctl_by_bdev(bdev, BLKRRPART, 0); 673 673 return lo->harderror; 674 674 case NBD_CLEAR_QUE: 675 675 /* ··· 680 680 return 0; 681 681 case NBD_PRINT_DEBUG: 682 682 printk(KERN_INFO "%s: next = %p, prev = %p, head = %p\n", 683 - inode->i_bdev->bd_disk->disk_name, 683 + bdev->bd_disk->disk_name, 684 684 lo->queue_head.next, lo->queue_head.prev, 685 685 &lo->queue_head); 686 686 return 0; ··· 691 691 static struct block_device_operations nbd_fops = 692 692 { 693 693 .owner = THIS_MODULE, 694 - .ioctl = nbd_ioctl, 694 + .locked_ioctl = nbd_ioctl, 695 695 }; 696 696 697 697 /*
+11 -10
drivers/block/paride/pcd.c
··· 223 223 224 224 /* kernel glue structures */ 225 225 226 - static int pcd_block_open(struct inode *inode, struct file *file) 226 + static int pcd_block_open(struct block_device *bdev, fmode_t mode) 227 227 { 228 - struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; 229 - return cdrom_open(&cd->info, inode, file); 228 + struct pcd_unit *cd = bdev->bd_disk->private_data; 229 + return cdrom_open(&cd->info, bdev, mode); 230 230 } 231 231 232 - static int pcd_block_release(struct inode *inode, struct file *file) 232 + static int pcd_block_release(struct gendisk *disk, fmode_t mode) 233 233 { 234 - struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; 235 - return cdrom_release(&cd->info, file); 234 + struct pcd_unit *cd = disk->private_data; 235 + cdrom_release(&cd->info, mode); 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 block_device *bdev, fmode_t mode, 239 240 unsigned cmd, unsigned long arg) 240 241 { 241 - struct pcd_unit *cd = inode->i_bdev->bd_disk->private_data; 242 - return cdrom_ioctl(file, &cd->info, inode, cmd, arg); 242 + struct pcd_unit *cd = bdev->bd_disk->private_data; 243 + return cdrom_ioctl(&cd->info, bdev, mode, cmd, arg); 243 244 } 244 245 245 246 static int pcd_block_media_changed(struct gendisk *disk) ··· 253 252 .owner = THIS_MODULE, 254 253 .open = pcd_block_open, 255 254 .release = pcd_block_release, 256 - .ioctl = pcd_block_ioctl, 255 + .locked_ioctl = pcd_block_ioctl, 257 256 .media_changed = pcd_block_media_changed, 258 257 }; 259 258
+7 -7
drivers/block/paride/pd.c
··· 728 728 729 729 /* kernel glue structures */ 730 730 731 - static int pd_open(struct inode *inode, struct file *file) 731 + static int pd_open(struct block_device *bdev, fmode_t mode) 732 732 { 733 - struct pd_unit *disk = inode->i_bdev->bd_disk->private_data; 733 + struct pd_unit *disk = bdev->bd_disk->private_data; 734 734 735 735 disk->access++; 736 736 ··· 758 758 return 0; 759 759 } 760 760 761 - static int pd_ioctl(struct inode *inode, struct file *file, 761 + static int pd_ioctl(struct block_device *bdev, fmode_t mode, 762 762 unsigned int cmd, unsigned long arg) 763 763 { 764 - struct pd_unit *disk = inode->i_bdev->bd_disk->private_data; 764 + struct pd_unit *disk = bdev->bd_disk->private_data; 765 765 766 766 switch (cmd) { 767 767 case CDROMEJECT: ··· 773 773 } 774 774 } 775 775 776 - static int pd_release(struct inode *inode, struct file *file) 776 + static int pd_release(struct gendisk *p, fmode_t mode) 777 777 { 778 - struct pd_unit *disk = inode->i_bdev->bd_disk->private_data; 778 + struct pd_unit *disk = p->private_data; 779 779 780 780 if (!--disk->access && disk->removable) 781 781 pd_special_command(disk, pd_door_unlock); ··· 809 809 .owner = THIS_MODULE, 810 810 .open = pd_open, 811 811 .release = pd_release, 812 - .ioctl = pd_ioctl, 812 + .locked_ioctl = pd_ioctl, 813 813 .getgeo = pd_getgeo, 814 814 .media_changed = pd_check_media, 815 815 .revalidate_disk= pd_revalidate
+11 -11
drivers/block/paride/pf.c
··· 201 201 #define ATAPI_READ_10 0x28 202 202 #define ATAPI_WRITE_10 0x2a 203 203 204 - static int pf_open(struct inode *inode, struct file *file); 204 + static int pf_open(struct block_device *bdev, fmode_t mode); 205 205 static void do_pf_request(struct request_queue * q); 206 - static int pf_ioctl(struct inode *inode, struct file *file, 206 + static int pf_ioctl(struct block_device *bdev, fmode_t mode, 207 207 unsigned int cmd, unsigned long arg); 208 208 static int pf_getgeo(struct block_device *bdev, struct hd_geometry *geo); 209 209 210 - static int pf_release(struct inode *inode, struct file *file); 210 + static int pf_release(struct gendisk *disk, fmode_t mode); 211 211 212 212 static int pf_detect(void); 213 213 static void do_pf_read(void); ··· 266 266 .owner = THIS_MODULE, 267 267 .open = pf_open, 268 268 .release = pf_release, 269 - .ioctl = pf_ioctl, 269 + .locked_ioctl = pf_ioctl, 270 270 .getgeo = pf_getgeo, 271 271 .media_changed = pf_check_media, 272 272 }; ··· 296 296 } 297 297 } 298 298 299 - static int pf_open(struct inode *inode, struct file *file) 299 + static int pf_open(struct block_device *bdev, fmode_t mode) 300 300 { 301 - struct pf_unit *pf = inode->i_bdev->bd_disk->private_data; 301 + struct pf_unit *pf = bdev->bd_disk->private_data; 302 302 303 303 pf_identify(pf); 304 304 305 305 if (pf->media_status == PF_NM) 306 306 return -ENODEV; 307 307 308 - if ((pf->media_status == PF_RO) && (file->f_mode & 2)) 308 + if ((pf->media_status == PF_RO) && (mode & FMODE_WRITE)) 309 309 return -EROFS; 310 310 311 311 pf->access++; ··· 333 333 return 0; 334 334 } 335 335 336 - static int pf_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 336 + static int pf_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) 337 337 { 338 - struct pf_unit *pf = inode->i_bdev->bd_disk->private_data; 338 + struct pf_unit *pf = bdev->bd_disk->private_data; 339 339 340 340 if (cmd != CDROMEJECT) 341 341 return -EINVAL; ··· 346 346 return 0; 347 347 } 348 348 349 - static int pf_release(struct inode *inode, struct file *file) 349 + static int pf_release(struct gendisk *disk, fmode_t mode) 350 350 { 351 - struct pf_unit *pf = inode->i_bdev->bd_disk->private_data; 351 + struct pf_unit *pf = disk->private_data; 352 352 353 353 if (pf->access <= 0) 354 354 return -EINVAL;
+1 -1
drivers/block/paride/pt.c
··· 667 667 goto out; 668 668 669 669 err = -EROFS; 670 - if ((!(tape->flags & PT_WRITE_OK)) && (file->f_mode & 2)) 670 + if ((!(tape->flags & PT_WRITE_OK)) && (file->f_mode & FMODE_WRITE)) 671 671 goto out; 672 672 673 673 if (!(iminor(inode) & 128))
+28 -28
drivers/block/pktcdvd.c
··· 2320 2320 /* 2321 2321 * called at open time. 2322 2322 */ 2323 - static int pkt_open_dev(struct pktcdvd_device *pd, int write) 2323 + static int pkt_open_dev(struct pktcdvd_device *pd, fmode_t write) 2324 2324 { 2325 2325 int ret; 2326 2326 long lba; ··· 2332 2332 * so bdget() can't fail. 2333 2333 */ 2334 2334 bdget(pd->bdev->bd_dev); 2335 - if ((ret = blkdev_get(pd->bdev, FMODE_READ, O_RDONLY))) 2335 + if ((ret = blkdev_get(pd->bdev, FMODE_READ))) 2336 2336 goto out; 2337 2337 2338 2338 if ((ret = bd_claim(pd->bdev, pd))) ··· 2381 2381 out_unclaim: 2382 2382 bd_release(pd->bdev); 2383 2383 out_putdev: 2384 - blkdev_put(pd->bdev); 2384 + blkdev_put(pd->bdev, FMODE_READ); 2385 2385 out: 2386 2386 return ret; 2387 2387 } ··· 2399 2399 2400 2400 pkt_set_speed(pd, MAX_SPEED, MAX_SPEED); 2401 2401 bd_release(pd->bdev); 2402 - blkdev_put(pd->bdev); 2402 + blkdev_put(pd->bdev, FMODE_READ); 2403 2403 2404 2404 pkt_shrink_pktlist(pd); 2405 2405 } ··· 2411 2411 return pkt_devs[dev_minor]; 2412 2412 } 2413 2413 2414 - static int pkt_open(struct inode *inode, struct file *file) 2414 + static int pkt_open(struct block_device *bdev, fmode_t mode) 2415 2415 { 2416 2416 struct pktcdvd_device *pd = NULL; 2417 2417 int ret; ··· 2419 2419 VPRINTK(DRIVER_NAME": entering open\n"); 2420 2420 2421 2421 mutex_lock(&ctl_mutex); 2422 - pd = pkt_find_dev_from_minor(iminor(inode)); 2422 + pd = pkt_find_dev_from_minor(MINOR(bdev->bd_dev)); 2423 2423 if (!pd) { 2424 2424 ret = -ENODEV; 2425 2425 goto out; ··· 2428 2428 2429 2429 pd->refcnt++; 2430 2430 if (pd->refcnt > 1) { 2431 - if ((file->f_mode & FMODE_WRITE) && 2431 + if ((mode & FMODE_WRITE) && 2432 2432 !test_bit(PACKET_WRITABLE, &pd->flags)) { 2433 2433 ret = -EBUSY; 2434 2434 goto out_dec; 2435 2435 } 2436 2436 } else { 2437 - ret = pkt_open_dev(pd, file->f_mode & FMODE_WRITE); 2437 + ret = pkt_open_dev(pd, mode & FMODE_WRITE); 2438 2438 if (ret) 2439 2439 goto out_dec; 2440 2440 /* 2441 2441 * needed here as well, since ext2 (among others) may change 2442 2442 * the blocksize at mount time 2443 2443 */ 2444 - set_blocksize(inode->i_bdev, CD_FRAMESIZE); 2444 + set_blocksize(bdev, CD_FRAMESIZE); 2445 2445 } 2446 2446 2447 2447 mutex_unlock(&ctl_mutex); ··· 2455 2455 return ret; 2456 2456 } 2457 2457 2458 - static int pkt_close(struct inode *inode, struct file *file) 2458 + static int pkt_close(struct gendisk *disk, fmode_t mode) 2459 2459 { 2460 - struct pktcdvd_device *pd = inode->i_bdev->bd_disk->private_data; 2460 + struct pktcdvd_device *pd = disk->private_data; 2461 2461 int ret = 0; 2462 2462 2463 2463 mutex_lock(&ctl_mutex); ··· 2765 2765 bdev = bdget(dev); 2766 2766 if (!bdev) 2767 2767 return -ENOMEM; 2768 - ret = blkdev_get(bdev, FMODE_READ, O_RDONLY | O_NONBLOCK); 2768 + ret = blkdev_get(bdev, FMODE_READ | FMODE_NDELAY); 2769 2769 if (ret) 2770 2770 return ret; 2771 2771 ··· 2790 2790 return 0; 2791 2791 2792 2792 out_mem: 2793 - blkdev_put(bdev); 2793 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 2794 2794 /* This is safe: open() is still holding a reference. */ 2795 2795 module_put(THIS_MODULE); 2796 2796 return ret; 2797 2797 } 2798 2798 2799 - static int pkt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) 2799 + static int pkt_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) 2800 2800 { 2801 - struct pktcdvd_device *pd = inode->i_bdev->bd_disk->private_data; 2801 + struct pktcdvd_device *pd = bdev->bd_disk->private_data; 2802 2802 2803 - VPRINTK("pkt_ioctl: cmd %x, dev %d:%d\n", cmd, imajor(inode), iminor(inode)); 2803 + VPRINTK("pkt_ioctl: cmd %x, dev %d:%d\n", cmd, 2804 + MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); 2804 2805 2805 2806 switch (cmd) { 2807 + case CDROMEJECT: 2808 + /* 2809 + * The door gets locked when the device is opened, so we 2810 + * have to unlock it or else the eject command fails. 2811 + */ 2812 + if (pd->refcnt == 1) 2813 + pkt_lock_door(pd, 0); 2814 + /* fallthru */ 2806 2815 /* 2807 2816 * forward selected CDROM ioctls to CD-ROM, for UDF 2808 2817 */ ··· 2820 2811 case CDROM_LAST_WRITTEN: 2821 2812 case CDROM_SEND_PACKET: 2822 2813 case SCSI_IOCTL_SEND_COMMAND: 2823 - return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg); 2824 - 2825 - case CDROMEJECT: 2826 - /* 2827 - * The door gets locked when the device is opened, so we 2828 - * have to unlock it or else the eject command fails. 2829 - */ 2830 - if (pd->refcnt == 1) 2831 - pkt_lock_door(pd, 0); 2832 - return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg); 2814 + return __blkdev_driver_ioctl(pd->bdev, mode, cmd, arg); 2833 2815 2834 2816 default: 2835 2817 VPRINTK(DRIVER_NAME": Unknown ioctl for %s (%x)\n", pd->name, cmd); ··· 2849 2849 .owner = THIS_MODULE, 2850 2850 .open = pkt_open, 2851 2851 .release = pkt_close, 2852 - .ioctl = pkt_ioctl, 2852 + .locked_ioctl = pkt_ioctl, 2853 2853 .media_changed = pkt_media_changed, 2854 2854 }; 2855 2855 ··· 2975 2975 pkt_debugfs_dev_remove(pd); 2976 2976 pkt_sysfs_dev_remove(pd); 2977 2977 2978 - blkdev_put(pd->bdev); 2978 + blkdev_put(pd->bdev, FMODE_READ|FMODE_WRITE); 2979 2979 2980 2980 remove_proc_entry(pd->name, pkt_proc); 2981 2981 DPRINTK(DRIVER_NAME": writer %s unmapped\n", pd->name);
+16 -16
drivers/block/swim3.c
··· 244 244 int interruptible); 245 245 static void release_drive(struct floppy_state *fs); 246 246 static int fd_eject(struct floppy_state *fs); 247 - static int floppy_ioctl(struct inode *inode, struct file *filp, 247 + static int floppy_ioctl(struct block_device *bdev, fmode_t mode, 248 248 unsigned int cmd, unsigned long param); 249 - static int floppy_open(struct inode *inode, struct file *filp); 250 - static int floppy_release(struct inode *inode, struct file *filp); 249 + static int floppy_open(struct block_device *bdev, fmode_t mode); 250 + static int floppy_release(struct gendisk *disk, fmode_t mode); 251 251 static int floppy_check_change(struct gendisk *disk); 252 252 static int floppy_revalidate(struct gendisk *disk); 253 253 ··· 839 839 static struct floppy_struct floppy_type = 840 840 { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,NULL }; /* 7 1.44MB 3.5" */ 841 841 842 - static int floppy_ioctl(struct inode *inode, struct file *filp, 842 + static int floppy_ioctl(struct block_device *bdev, fmode_t mode, 843 843 unsigned int cmd, unsigned long param) 844 844 { 845 - struct floppy_state *fs = inode->i_bdev->bd_disk->private_data; 845 + struct floppy_state *fs = bdev->bd_disk->private_data; 846 846 int err; 847 847 848 848 if ((cmd & 0x80) && !capable(CAP_SYS_ADMIN)) ··· 868 868 return -ENOTTY; 869 869 } 870 870 871 - static int floppy_open(struct inode *inode, struct file *filp) 871 + static int floppy_open(struct block_device *bdev, fmode_t mode) 872 872 { 873 - struct floppy_state *fs = inode->i_bdev->bd_disk->private_data; 873 + struct floppy_state *fs = bdev->bd_disk->private_data; 874 874 struct swim3 __iomem *sw = fs->swim3; 875 875 int n, err = 0; 876 876 ··· 904 904 swim3_action(fs, SETMFM); 905 905 swim3_select(fs, RELAX); 906 906 907 - } else if (fs->ref_count == -1 || filp->f_flags & O_EXCL) 907 + } else if (fs->ref_count == -1 || mode & FMODE_EXCL) 908 908 return -EBUSY; 909 909 910 - if (err == 0 && (filp->f_flags & O_NDELAY) == 0 911 - && (filp->f_mode & 3)) { 912 - check_disk_change(inode->i_bdev); 910 + if (err == 0 && (mode & FMODE_NDELAY) == 0 911 + && (mode & (FMODE_READ|FMODE_WRITE))) { 912 + check_disk_change(bdev); 913 913 if (fs->ejected) 914 914 err = -ENXIO; 915 915 } 916 916 917 - if (err == 0 && (filp->f_mode & 2)) { 917 + if (err == 0 && (mode & FMODE_WRITE)) { 918 918 if (fs->write_prot < 0) 919 919 fs->write_prot = swim3_readbit(fs, WRITE_PROT); 920 920 if (fs->write_prot) ··· 930 930 return err; 931 931 } 932 932 933 - if (filp->f_flags & O_EXCL) 933 + if (mode & FMODE_EXCL) 934 934 fs->ref_count = -1; 935 935 else 936 936 ++fs->ref_count; ··· 938 938 return 0; 939 939 } 940 940 941 - static int floppy_release(struct inode *inode, struct file *filp) 941 + static int floppy_release(struct gendisk *disk, fmode_t mode) 942 942 { 943 - struct floppy_state *fs = inode->i_bdev->bd_disk->private_data; 943 + struct floppy_state *fs = disk->private_data; 944 944 struct swim3 __iomem *sw = fs->swim3; 945 945 if (fs->ref_count > 0 && --fs->ref_count == 0) { 946 946 swim3_action(fs, MOTOR_OFF); ··· 1000 1000 static struct block_device_operations floppy_fops = { 1001 1001 .open = floppy_open, 1002 1002 .release = floppy_release, 1003 - .ioctl = floppy_ioctl, 1003 + .locked_ioctl = floppy_ioctl, 1004 1004 .media_changed = floppy_check_change, 1005 1005 .revalidate_disk= floppy_revalidate, 1006 1006 };
+10 -12
drivers/block/ub.c
··· 1667 1667 * This is mostly needed to keep refcounting, but also to support 1668 1668 * media checks on removable media drives. 1669 1669 */ 1670 - static int ub_bd_open(struct inode *inode, struct file *filp) 1670 + static int ub_bd_open(struct block_device *bdev, fmode_t mode) 1671 1671 { 1672 - struct gendisk *disk = inode->i_bdev->bd_disk; 1673 - struct ub_lun *lun = disk->private_data; 1672 + struct ub_lun *lun = bdev->bd_disk->private_data; 1674 1673 struct ub_dev *sc = lun->udev; 1675 1674 unsigned long flags; 1676 1675 int rc; ··· 1683 1684 spin_unlock_irqrestore(&ub_lock, flags); 1684 1685 1685 1686 if (lun->removable || lun->readonly) 1686 - check_disk_change(inode->i_bdev); 1687 + check_disk_change(bdev); 1687 1688 1688 1689 /* 1689 1690 * The sd.c considers ->media_present and ->changed not equivalent, 1690 1691 * under some pretty murky conditions (a failure of READ CAPACITY). 1691 1692 * We may need it one day. 1692 1693 */ 1693 - if (lun->removable && lun->changed && !(filp->f_flags & O_NDELAY)) { 1694 + if (lun->removable && lun->changed && !(mode & FMODE_NDELAY)) { 1694 1695 rc = -ENOMEDIUM; 1695 1696 goto err_open; 1696 1697 } 1697 1698 1698 - if (lun->readonly && (filp->f_mode & FMODE_WRITE)) { 1699 + if (lun->readonly && (mode & FMODE_WRITE)) { 1699 1700 rc = -EROFS; 1700 1701 goto err_open; 1701 1702 } ··· 1709 1710 1710 1711 /* 1711 1712 */ 1712 - static int ub_bd_release(struct inode *inode, struct file *filp) 1713 + static int ub_bd_release(struct gendisk *disk, fmode_t mode) 1713 1714 { 1714 - struct gendisk *disk = inode->i_bdev->bd_disk; 1715 1715 struct ub_lun *lun = disk->private_data; 1716 1716 struct ub_dev *sc = lun->udev; 1717 1717 ··· 1721 1723 /* 1722 1724 * The ioctl interface. 1723 1725 */ 1724 - static int ub_bd_ioctl(struct inode *inode, struct file *filp, 1726 + static int ub_bd_ioctl(struct block_device *bdev, fmode_t mode, 1725 1727 unsigned int cmd, unsigned long arg) 1726 1728 { 1727 - struct gendisk *disk = inode->i_bdev->bd_disk; 1729 + struct gendisk *disk = bdev->bd_disk; 1728 1730 void __user *usermem = (void __user *) arg; 1729 1731 1730 - return scsi_cmd_ioctl(filp, disk->queue, disk, cmd, usermem); 1732 + return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, usermem); 1731 1733 } 1732 1734 1733 1735 /* ··· 1791 1793 .owner = THIS_MODULE, 1792 1794 .open = ub_bd_open, 1793 1795 .release = ub_bd_release, 1794 - .ioctl = ub_bd_ioctl, 1796 + .locked_ioctl = ub_bd_ioctl, 1795 1797 .media_changed = ub_bd_media_changed, 1796 1798 .revalidate_disk = ub_bd_revalidate, 1797 1799 };
+5 -5
drivers/block/viodasd.c
··· 130 130 /* 131 131 * External open entry point. 132 132 */ 133 - static int viodasd_open(struct inode *ino, struct file *fil) 133 + static int viodasd_open(struct block_device *bdev, fmode_t mode) 134 134 { 135 - struct viodasd_device *d = ino->i_bdev->bd_disk->private_data; 135 + struct viodasd_device *d = bdev->bd_disk->private_data; 136 136 HvLpEvent_Rc hvrc; 137 137 struct viodasd_waitevent we; 138 138 u16 flags = 0; 139 139 140 140 if (d->read_only) { 141 - if ((fil != NULL) && (fil->f_mode & FMODE_WRITE)) 141 + if (mode & FMODE_WRITE) 142 142 return -EROFS; 143 143 flags = vioblockflags_ro; 144 144 } ··· 179 179 /* 180 180 * External release entry point. 181 181 */ 182 - static int viodasd_release(struct inode *ino, struct file *fil) 182 + static int viodasd_release(struct gendisk *disk, fmode_t mode) 183 183 { 184 - struct viodasd_device *d = ino->i_bdev->bd_disk->private_data; 184 + struct viodasd_device *d = disk->private_data; 185 185 HvLpEvent_Rc hvrc; 186 186 187 187 /* Send the event to OS/400. We DON'T expect a response */
+4 -4
drivers/block/virtio_blk.c
··· 146 146 vblk->vq->vq_ops->kick(vblk->vq); 147 147 } 148 148 149 - static int virtblk_ioctl(struct inode *inode, struct file *filp, 149 + static int virtblk_ioctl(struct block_device *bdev, fmode_t mode, 150 150 unsigned cmd, unsigned long data) 151 151 { 152 - return scsi_cmd_ioctl(filp, inode->i_bdev->bd_disk->queue, 153 - inode->i_bdev->bd_disk, cmd, 152 + return scsi_cmd_ioctl(bdev->bd_disk->queue, 153 + bdev->bd_disk, mode, cmd, 154 154 (void __user *)data); 155 155 } 156 156 ··· 180 180 } 181 181 182 182 static struct block_device_operations virtblk_fops = { 183 - .ioctl = virtblk_ioctl, 183 + .locked_ioctl = virtblk_ioctl, 184 184 .owner = THIS_MODULE, 185 185 .getgeo = virtblk_getgeo, 186 186 };
+2 -2
drivers/block/xd.c
··· 132 132 133 133 static struct block_device_operations xd_fops = { 134 134 .owner = THIS_MODULE, 135 - .ioctl = xd_ioctl, 135 + .locked_ioctl = xd_ioctl, 136 136 .getgeo = xd_getgeo, 137 137 }; 138 138 static DECLARE_WAIT_QUEUE_HEAD(xd_wait_int); ··· 343 343 } 344 344 345 345 /* xd_ioctl: handle device ioctl's */ 346 - static int xd_ioctl (struct inode *inode,struct file *file,u_int cmd,u_long arg) 346 + static int xd_ioctl(struct block_device *bdev, fmode_t mode, u_int cmd, u_long arg) 347 347 { 348 348 switch (cmd) { 349 349 case HDIO_SET_DMA:
+1 -1
drivers/block/xd.h
··· 105 105 static u_char xd_initdrives (void (*init_drive)(u_char drive)); 106 106 107 107 static void do_xd_request (struct request_queue * q); 108 - static int xd_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg); 108 + static int xd_ioctl (struct block_device *bdev,fmode_t mode,unsigned int cmd,unsigned long arg); 109 109 static int xd_readwrite (u_char operation,XD_INFO *disk,char *buffer,u_int block,u_int count); 110 110 static void xd_recalibrate (u_char drive); 111 111
+7 -8
drivers/block/xen-blkfront.c
··· 156 156 return 0; 157 157 } 158 158 159 - static int blkif_ioctl(struct inode *inode, struct file *filep, 159 + static int blkif_ioctl(struct block_device *bdev, fmode_t mode, 160 160 unsigned command, unsigned long argument) 161 161 { 162 - struct blkfront_info *info = 163 - inode->i_bdev->bd_disk->private_data; 162 + struct blkfront_info *info = bdev->bd_disk->private_data; 164 163 int i; 165 164 166 165 dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n", ··· 1013 1014 return info->is_ready; 1014 1015 } 1015 1016 1016 - static int blkif_open(struct inode *inode, struct file *filep) 1017 + static int blkif_open(struct block_device *bdev, fmode_t mode) 1017 1018 { 1018 - struct blkfront_info *info = inode->i_bdev->bd_disk->private_data; 1019 + struct blkfront_info *info = bdev->bd_disk->private_data; 1019 1020 info->users++; 1020 1021 return 0; 1021 1022 } 1022 1023 1023 - static int blkif_release(struct inode *inode, struct file *filep) 1024 + static int blkif_release(struct gendisk *disk, fmode_t mode) 1024 1025 { 1025 - struct blkfront_info *info = inode->i_bdev->bd_disk->private_data; 1026 + struct blkfront_info *info = disk->private_data; 1026 1027 info->users--; 1027 1028 if (info->users == 0) { 1028 1029 /* Check whether we have been instructed to close. We will ··· 1043 1044 .open = blkif_open, 1044 1045 .release = blkif_release, 1045 1046 .getgeo = blkif_getgeo, 1046 - .ioctl = blkif_ioctl, 1047 + .locked_ioctl = blkif_ioctl, 1047 1048 }; 1048 1049 1049 1050
+5 -6
drivers/block/xsysace.c
··· 870 870 return ace->id_result; 871 871 } 872 872 873 - static int ace_open(struct inode *inode, struct file *filp) 873 + static int ace_open(struct block_device *bdev, fmode_t mode) 874 874 { 875 - struct ace_device *ace = inode->i_bdev->bd_disk->private_data; 875 + struct ace_device *ace = bdev->bd_disk->private_data; 876 876 unsigned long flags; 877 877 878 878 dev_dbg(ace->dev, "ace_open() users=%i\n", ace->users + 1); 879 879 880 - filp->private_data = ace; 881 880 spin_lock_irqsave(&ace->lock, flags); 882 881 ace->users++; 883 882 spin_unlock_irqrestore(&ace->lock, flags); 884 883 885 - check_disk_change(inode->i_bdev); 884 + check_disk_change(bdev); 886 885 return 0; 887 886 } 888 887 889 - static int ace_release(struct inode *inode, struct file *filp) 888 + static int ace_release(struct gendisk *disk, fmode_t mode) 890 889 { 891 - struct ace_device *ace = inode->i_bdev->bd_disk->private_data; 890 + struct ace_device *ace = disk->private_data; 892 891 unsigned long flags; 893 892 u16 val; 894 893
+3 -4
drivers/block/z2ram.c
··· 137 137 return; 138 138 } 139 139 140 - static int 141 - z2_open( struct inode *inode, struct file *filp ) 140 + static int z2_open(struct block_device *bdev, fmode_t mode) 142 141 { 143 142 int device; 144 143 int max_z2_map = ( Z2RAM_SIZE / Z2RAM_CHUNKSIZE ) * ··· 146 147 sizeof( z2ram_map[0] ); 147 148 int rc = -ENOMEM; 148 149 149 - device = iminor(inode); 150 + device = MINOR(bdev->bd_dev); 150 151 151 152 if ( current_device != -1 && current_device != device ) 152 153 { ··· 298 299 } 299 300 300 301 static int 301 - z2_release( struct inode *inode, struct file *filp ) 302 + z2_release(struct gendisk *disk, fmode_t mode) 302 303 { 303 304 if ( current_device == -1 ) 304 305 return 0;
+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_flags & O_NONBLOCK) && (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_flags & O_NONBLOCK); 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(file, disk->queue, disk, 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:
+7 -7
drivers/cdrom/gdrom.c
··· 490 490 .n_minors = 1, 491 491 }; 492 492 493 - static int gdrom_bdops_open(struct inode *inode, struct file *file) 493 + static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode) 494 494 { 495 - return cdrom_open(gd.cd_info, inode, file); 495 + return cdrom_open(gd.cd_info, bdev, mode); 496 496 } 497 497 498 - static int gdrom_bdops_release(struct inode *inode, struct file *file) 498 + static int gdrom_bdops_release(struct block_device *bdev, fmode_t mode) 499 499 { 500 - return cdrom_release(gd.cd_info, file); 500 + return cdrom_release(gd.cd_info, mode); 501 501 } 502 502 503 503 static int gdrom_bdops_mediachanged(struct gendisk *disk) ··· 505 505 return cdrom_media_changed(gd.cd_info); 506 506 } 507 507 508 - static int gdrom_bdops_ioctl(struct inode *inode, struct file *file, 508 + static int gdrom_bdops_ioctl(struct block_device *bdev, fmode_t mode, 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, bdev, mode, cmd, arg); 512 512 } 513 513 514 514 static struct block_device_operations gdrom_bdops = { ··· 516 516 .open = gdrom_bdops_open, 517 517 .release = gdrom_bdops_release, 518 518 .media_changed = gdrom_bdops_mediachanged, 519 - .ioctl = gdrom_bdops_ioctl, 519 + .locked_ioctl = gdrom_bdops_ioctl, 520 520 }; 521 521 522 522 static irqreturn_t gdrom_command_interrupt(int irq, void *dev_id)
+11 -10
drivers/cdrom/viocd.c
··· 151 151 .release = single_release, 152 152 }; 153 153 154 - static int viocd_blk_open(struct inode *inode, struct file *file) 154 + static int viocd_blk_open(struct block_device *bdev, fmode_t mode) 155 155 { 156 - struct disk_info *di = inode->i_bdev->bd_disk->private_data; 157 - return cdrom_open(&di->viocd_info, inode, file); 156 + struct disk_info *di = bdev->bd_disk->private_data; 157 + return cdrom_open(&di->viocd_info, bdev, mode); 158 158 } 159 159 160 - static int viocd_blk_release(struct inode *inode, struct file *file) 160 + static int viocd_blk_release(struct gendisk *disk, fmode_t mode) 161 161 { 162 - struct disk_info *di = inode->i_bdev->bd_disk->private_data; 163 - return cdrom_release(&di->viocd_info, file); 162 + struct disk_info *di = disk->private_data; 163 + cdrom_release(&di->viocd_info, mode); 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 block_device *bdev, fmode_t mode, 167 168 unsigned cmd, unsigned long arg) 168 169 { 169 - struct disk_info *di = inode->i_bdev->bd_disk->private_data; 170 - return cdrom_ioctl(file, &di->viocd_info, inode, cmd, arg); 170 + struct disk_info *di = bdev->bd_disk->private_data; 171 + return cdrom_ioctl(&di->viocd_info, bdev, mode, cmd, arg); 171 172 } 172 173 173 174 static int viocd_blk_media_changed(struct gendisk *disk) ··· 181 180 .owner = THIS_MODULE, 182 181 .open = viocd_blk_open, 183 182 .release = viocd_blk_release, 184 - .ioctl = viocd_blk_ioctl, 183 + .locked_ioctl = viocd_blk_ioctl, 185 184 .media_changed = viocd_blk_media_changed, 186 185 }; 187 186
+3 -3
drivers/char/nvram.c
··· 338 338 339 339 if ((nvram_open_cnt && (file->f_flags & O_EXCL)) || 340 340 (nvram_open_mode & NVRAM_EXCL) || 341 - ((file->f_mode & 2) && (nvram_open_mode & NVRAM_WRITE))) { 341 + ((file->f_mode & FMODE_WRITE) && (nvram_open_mode & NVRAM_WRITE))) { 342 342 spin_unlock(&nvram_state_lock); 343 343 unlock_kernel(); 344 344 return -EBUSY; ··· 346 346 347 347 if (file->f_flags & O_EXCL) 348 348 nvram_open_mode |= NVRAM_EXCL; 349 - if (file->f_mode & 2) 349 + if (file->f_mode & FMODE_WRITE) 350 350 nvram_open_mode |= NVRAM_WRITE; 351 351 nvram_open_cnt++; 352 352 ··· 366 366 /* if only one instance is open, clear the EXCL bit */ 367 367 if (nvram_open_mode & NVRAM_EXCL) 368 368 nvram_open_mode &= ~NVRAM_EXCL; 369 - if (file->f_mode & 2) 369 + if (file->f_mode & FMODE_WRITE) 370 370 nvram_open_mode &= ~NVRAM_WRITE; 371 371 372 372 spin_unlock(&nvram_state_lock);
+4 -4
drivers/char/raw.c
··· 65 65 if (!bdev) 66 66 goto out; 67 67 igrab(bdev->bd_inode); 68 - err = blkdev_get(bdev, filp->f_mode, 0); 68 + err = blkdev_get(bdev, filp->f_mode); 69 69 if (err) 70 70 goto out; 71 71 err = bd_claim(bdev, raw_open); ··· 87 87 out2: 88 88 bd_release(bdev); 89 89 out1: 90 - blkdev_put(bdev); 90 + blkdev_put(bdev, filp->f_mode); 91 91 out: 92 92 mutex_unlock(&raw_mutex); 93 93 return err; ··· 112 112 mutex_unlock(&raw_mutex); 113 113 114 114 bd_release(bdev); 115 - blkdev_put(bdev); 115 + blkdev_put(bdev, filp->f_mode); 116 116 return 0; 117 117 } 118 118 ··· 125 125 { 126 126 struct block_device *bdev = filp->private_data; 127 127 128 - return blkdev_ioctl(bdev->bd_inode, NULL, command, arg); 128 + return blkdev_ioctl(bdev, 0, command, arg); 129 129 } 130 130 131 131 static void bind_device(struct raw_config_request *rq)
+9 -13
drivers/ide/ide-cd.c
··· 2089 2089 #endif 2090 2090 }; 2091 2091 2092 - static int idecd_open(struct inode *inode, struct file *file) 2092 + static int idecd_open(struct block_device *bdev, fmode_t mode) 2093 2093 { 2094 - struct gendisk *disk = inode->i_bdev->bd_disk; 2095 - struct cdrom_info *info; 2094 + struct cdrom_info *info = ide_cd_get(bdev->bd_disk); 2096 2095 int rc = -ENOMEM; 2097 2096 2098 - info = ide_cd_get(disk); 2099 2097 if (!info) 2100 2098 return -ENXIO; 2101 2099 2102 - rc = cdrom_open(&info->devinfo, inode, file); 2100 + rc = cdrom_open(&info->devinfo, bdev, mode); 2103 2101 2104 2102 if (rc < 0) 2105 2103 ide_cd_put(info); ··· 2105 2107 return rc; 2106 2108 } 2107 2109 2108 - static int idecd_release(struct inode *inode, struct file *file) 2110 + static int idecd_release(struct gendisk *disk, fmode_t mode) 2109 2111 { 2110 - struct gendisk *disk = inode->i_bdev->bd_disk; 2111 2112 struct cdrom_info *info = ide_drv_g(disk, cdrom_info); 2112 2113 2113 - cdrom_release(&info->devinfo, file); 2114 + cdrom_release(&info->devinfo, mode); 2114 2115 2115 2116 ide_cd_put(info); 2116 2117 ··· 2155 2158 return 0; 2156 2159 } 2157 2160 2158 - static int idecd_ioctl(struct inode *inode, struct file *file, 2161 + static int idecd_ioctl(struct block_device *bdev, fmode_t mode, 2159 2162 unsigned int cmd, unsigned long arg) 2160 2163 { 2161 - struct block_device *bdev = inode->i_bdev; 2162 2164 struct cdrom_info *info = ide_drv_g(bdev->bd_disk, cdrom_info); 2163 2165 int err; 2164 2166 ··· 2170 2174 break; 2171 2175 } 2172 2176 2173 - err = generic_ide_ioctl(info->drive, file, bdev, cmd, arg); 2177 + err = generic_ide_ioctl(info->drive, bdev, cmd, arg); 2174 2178 if (err == -EINVAL) 2175 - err = cdrom_ioctl(file, &info->devinfo, inode, cmd, arg); 2179 + err = cdrom_ioctl(&info->devinfo, bdev, mode, cmd, arg); 2176 2180 2177 2181 return err; 2178 2182 } ··· 2197 2201 .owner = THIS_MODULE, 2198 2202 .open = idecd_open, 2199 2203 .release = idecd_release, 2200 - .ioctl = idecd_ioctl, 2204 + .locked_ioctl = idecd_ioctl, 2201 2205 .media_changed = idecd_media_changed, 2202 2206 .revalidate_disk = idecd_revalidate_disk 2203 2207 };
+1 -1
drivers/ide/ide-disk.h
··· 13 13 ide_decl_devset(acoustic); 14 14 15 15 /* ide-disk_ioctl.c */ 16 - int ide_disk_ioctl(ide_drive_t *, struct inode *, struct file *, unsigned int, 16 + int ide_disk_ioctl(ide_drive_t *, struct block_device *, fmode_t, unsigned int, 17 17 unsigned long); 18 18 19 19 #ifdef CONFIG_IDE_PROC_FS
+2 -3
drivers/ide/ide-disk_ioctl.c
··· 13 13 { 0 } 14 14 }; 15 15 16 - int ide_disk_ioctl(ide_drive_t *drive, struct inode *inode, struct file *file, 16 + int ide_disk_ioctl(ide_drive_t *drive, struct block_device *bdev, fmode_t mode, 17 17 unsigned int cmd, unsigned long arg) 18 18 { 19 - struct block_device *bdev = inode->i_bdev; 20 19 int err; 21 20 22 21 err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings); 23 22 if (err != -EOPNOTSUPP) 24 23 return err; 25 24 26 - return generic_ide_ioctl(drive, file, bdev, cmd, arg); 25 + return generic_ide_ioctl(drive, bdev, cmd, arg); 27 26 }
+2 -2
drivers/ide/ide-floppy.h
··· 23 23 void ide_floppy_create_read_capacity_cmd(struct ide_atapi_pc *); 24 24 25 25 /* ide-floppy_ioctl.c */ 26 - int ide_floppy_ioctl(ide_drive_t *, struct inode *, struct file *, unsigned int, 27 - unsigned long); 26 + int ide_floppy_ioctl(ide_drive_t *, struct block_device *, fmode_t, 27 + unsigned int, unsigned long); 28 28 29 29 #ifdef CONFIG_IDE_PROC_FS 30 30 /* ide-floppy_proc.c */
+8 -9
drivers/ide/ide-floppy_ioctl.c
··· 241 241 return 0; 242 242 } 243 243 244 - static int ide_floppy_format_ioctl(ide_drive_t *drive, struct file *file, 244 + static int ide_floppy_format_ioctl(ide_drive_t *drive, fmode_t mode, 245 245 unsigned int cmd, void __user *argp) 246 246 { 247 247 switch (cmd) { ··· 250 250 case IDEFLOPPY_IOCTL_FORMAT_GET_CAPACITY: 251 251 return ide_floppy_get_format_capacities(drive, argp); 252 252 case IDEFLOPPY_IOCTL_FORMAT_START: 253 - if (!(file->f_mode & 2)) 253 + if (!(mode & FMODE_WRITE)) 254 254 return -EPERM; 255 255 return ide_floppy_format_unit(drive, (int __user *)argp); 256 256 case IDEFLOPPY_IOCTL_FORMAT_GET_PROGRESS: ··· 260 260 } 261 261 } 262 262 263 - int ide_floppy_ioctl(ide_drive_t *drive, struct inode *inode, 264 - struct file *file, unsigned int cmd, unsigned long arg) 263 + int ide_floppy_ioctl(ide_drive_t *drive, struct block_device *bdev, 264 + fmode_t mode, unsigned int cmd, unsigned long arg) 265 265 { 266 - struct block_device *bdev = inode->i_bdev; 267 266 struct ide_atapi_pc pc; 268 267 void __user *argp = (void __user *)arg; 269 268 int err; ··· 270 271 if (cmd == CDROMEJECT || cmd == CDROM_LOCKDOOR) 271 272 return ide_floppy_lockdoor(drive, &pc, arg, cmd); 272 273 273 - err = ide_floppy_format_ioctl(drive, file, cmd, argp); 274 + err = ide_floppy_format_ioctl(drive, mode, cmd, argp); 274 275 if (err != -ENOTTY) 275 276 return err; 276 277 ··· 279 280 * and CDROM_SEND_PACKET (legacy) ioctls 280 281 */ 281 282 if (cmd != CDROM_SEND_PACKET && cmd != SCSI_IOCTL_SEND_COMMAND) 282 - err = scsi_cmd_ioctl(file, bdev->bd_disk->queue, 283 - bdev->bd_disk, cmd, argp); 283 + err = scsi_cmd_ioctl(bdev->bd_disk->queue, bdev->bd_disk, 284 + mode, cmd, argp); 284 285 285 286 if (err == -ENOTTY) 286 - err = generic_ide_ioctl(drive, file, bdev, cmd, arg); 287 + err = generic_ide_ioctl(drive, bdev, cmd, arg); 287 288 288 289 return err; 289 290 }
+9 -11
drivers/ide/ide-gd.c
··· 169 169 #endif 170 170 }; 171 171 172 - static int ide_gd_open(struct inode *inode, struct file *filp) 172 + static int ide_gd_open(struct block_device *bdev, fmode_t mode) 173 173 { 174 - struct gendisk *disk = inode->i_bdev->bd_disk; 174 + struct gendisk *disk = bdev->bd_disk; 175 175 struct ide_disk_obj *idkp; 176 176 ide_drive_t *drive; 177 177 int ret = 0; ··· 197 197 * unreadable disk, so that we can get the format capacity 198 198 * of the drive or begin the format - Sam 199 199 */ 200 - if (ret && (filp->f_flags & O_NDELAY) == 0) { 200 + if (ret && (mode & FMODE_NDELAY) == 0) { 201 201 ret = -EIO; 202 202 goto out_put_idkp; 203 203 } 204 204 205 - if ((drive->dev_flags & IDE_DFLAG_WP) && (filp->f_mode & 2)) { 205 + if ((drive->dev_flags & IDE_DFLAG_WP) && (mode & FMODE_WRITE)) { 206 206 ret = -EROFS; 207 207 goto out_put_idkp; 208 208 } ··· 214 214 */ 215 215 drive->disk_ops->set_doorlock(drive, disk, 1); 216 216 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; 217 - check_disk_change(inode->i_bdev); 217 + check_disk_change(bdev); 218 218 } else if (drive->dev_flags & IDE_DFLAG_FORMAT_IN_PROGRESS) { 219 219 ret = -EBUSY; 220 220 goto out_put_idkp; ··· 227 227 return ret; 228 228 } 229 229 230 - static int ide_gd_release(struct inode *inode, struct file *filp) 230 + static int ide_gd_release(struct gendisk *disk, fmode_t mode) 231 231 { 232 - struct gendisk *disk = inode->i_bdev->bd_disk; 233 232 struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj); 234 233 ide_drive_t *drive = idkp->drive; 235 234 ··· 285 286 return 0; 286 287 } 287 288 288 - static int ide_gd_ioctl(struct inode *inode, struct file *file, 289 + static int ide_gd_ioctl(struct block_device *bdev, fmode_t mode, 289 290 unsigned int cmd, unsigned long arg) 290 291 { 291 - struct block_device *bdev = inode->i_bdev; 292 292 struct ide_disk_obj *idkp = ide_drv_g(bdev->bd_disk, ide_disk_obj); 293 293 ide_drive_t *drive = idkp->drive; 294 294 295 - return drive->disk_ops->ioctl(drive, inode, file, cmd, arg); 295 + return drive->disk_ops->ioctl(drive, bdev, mode, cmd, arg); 296 296 } 297 297 298 298 static struct block_device_operations ide_gd_ops = { 299 299 .owner = THIS_MODULE, 300 300 .open = ide_gd_open, 301 301 .release = ide_gd_release, 302 - .ioctl = ide_gd_ioctl, 302 + .locked_ioctl = ide_gd_ioctl, 303 303 .getgeo = ide_gd_getgeo, 304 304 .media_changed = ide_gd_media_changed, 305 305 .revalidate_disk = ide_gd_revalidate_disk
+1 -2
drivers/ide/ide-ioctls.c
··· 240 240 return ret; 241 241 } 242 242 243 - int generic_ide_ioctl(ide_drive_t *drive, struct file *file, 244 - struct block_device *bdev, 243 + int generic_ide_ioctl(ide_drive_t *drive, struct block_device *bdev, 245 244 unsigned int cmd, unsigned long arg) 246 245 { 247 246 int err;
+6 -11
drivers/ide/ide-tape.c
··· 2340 2340 .release = idetape_chrdev_release, 2341 2341 }; 2342 2342 2343 - static int idetape_open(struct inode *inode, struct file *filp) 2343 + static int idetape_open(struct block_device *bdev, fmode_t mode) 2344 2344 { 2345 - struct gendisk *disk = inode->i_bdev->bd_disk; 2346 - struct ide_tape_obj *tape; 2345 + struct ide_tape_obj *tape = ide_tape_get(bdev->bd_disk); 2347 2346 2348 - tape = ide_tape_get(disk); 2349 2347 if (!tape) 2350 2348 return -ENXIO; 2351 2349 2352 2350 return 0; 2353 2351 } 2354 2352 2355 - static int idetape_release(struct inode *inode, struct file *filp) 2353 + static int idetape_release(struct gendisk *disk, fmode_t mode) 2356 2354 { 2357 - struct gendisk *disk = inode->i_bdev->bd_disk; 2358 2355 struct ide_tape_obj *tape = ide_drv_g(disk, ide_tape_obj); 2359 2356 2360 2357 ide_tape_put(tape); 2361 - 2362 2358 return 0; 2363 2359 } 2364 2360 2365 - static int idetape_ioctl(struct inode *inode, struct file *file, 2361 + static int idetape_ioctl(struct block_device *bdev, fmode_t mode, 2366 2362 unsigned int cmd, unsigned long arg) 2367 2363 { 2368 - struct block_device *bdev = inode->i_bdev; 2369 2364 struct ide_tape_obj *tape = ide_drv_g(bdev->bd_disk, ide_tape_obj); 2370 2365 ide_drive_t *drive = tape->drive; 2371 - int err = generic_ide_ioctl(drive, file, bdev, cmd, arg); 2366 + int err = generic_ide_ioctl(drive, bdev, cmd, arg); 2372 2367 if (err == -EINVAL) 2373 2368 err = idetape_blkdev_ioctl(drive, cmd, arg); 2374 2369 return err; ··· 2373 2378 .owner = THIS_MODULE, 2374 2379 .open = idetape_open, 2375 2380 .release = idetape_release, 2376 - .ioctl = idetape_ioctl, 2381 + .locked_ioctl = idetape_ioctl, 2377 2382 }; 2378 2383 2379 2384 static int ide_tape_probe(ide_drive_t *drive)
+2 -2
drivers/md/dm-ioctl.c
··· 988 988 return r; 989 989 } 990 990 991 - static inline int get_mode(struct dm_ioctl *param) 991 + static inline fmode_t get_mode(struct dm_ioctl *param) 992 992 { 993 - int mode = FMODE_READ | FMODE_WRITE; 993 + fmode_t mode = FMODE_READ | FMODE_WRITE; 994 994 995 995 if (param->flags & DM_READONLY_FLAG) 996 996 mode = FMODE_READ;
+2 -11
drivers/md/dm-linear.c
··· 110 110 return 0; 111 111 } 112 112 113 - static int linear_ioctl(struct dm_target *ti, struct inode *inode, 114 - struct file *filp, unsigned int cmd, 113 + static int linear_ioctl(struct dm_target *ti, unsigned int cmd, 115 114 unsigned long arg) 116 115 { 117 116 struct linear_c *lc = (struct linear_c *) ti->private; 118 - struct block_device *bdev = lc->dev->bdev; 119 - struct file fake_file = {}; 120 - struct dentry fake_dentry = {}; 121 - 122 - fake_file.f_mode = lc->dev->mode; 123 - fake_file.f_path.dentry = &fake_dentry; 124 - fake_dentry.d_inode = bdev->bd_inode; 125 - 126 - return blkdev_driver_ioctl(bdev->bd_inode, &fake_file, bdev->bd_disk, cmd, arg); 117 + return __blkdev_driver_ioctl(lc->dev->bdev, lc->dev->mode, cmd, arg); 127 118 } 128 119 129 120 static int linear_merge(struct dm_target *ti, struct bvec_merge_data *bvm,
+4 -10
drivers/md/dm-mpath.c
··· 1396 1396 return -EINVAL; 1397 1397 } 1398 1398 1399 - static int multipath_ioctl(struct dm_target *ti, struct inode *inode, 1400 - struct file *filp, unsigned int cmd, 1399 + static int multipath_ioctl(struct dm_target *ti, unsigned int cmd, 1401 1400 unsigned long arg) 1402 1401 { 1403 1402 struct multipath *m = (struct multipath *) ti->private; 1404 1403 struct block_device *bdev = NULL; 1404 + fmode_t mode = 0; 1405 1405 unsigned long flags; 1406 - struct file fake_file = {}; 1407 - struct dentry fake_dentry = {}; 1408 1406 int r = 0; 1409 - 1410 - fake_file.f_path.dentry = &fake_dentry; 1411 1407 1412 1408 spin_lock_irqsave(&m->lock, flags); 1413 1409 ··· 1412 1416 1413 1417 if (m->current_pgpath) { 1414 1418 bdev = m->current_pgpath->path.dev->bdev; 1415 - fake_dentry.d_inode = bdev->bd_inode; 1416 - fake_file.f_mode = m->current_pgpath->path.dev->mode; 1419 + mode = m->current_pgpath->path.dev->mode; 1417 1420 } 1418 1421 1419 1422 if (m->queue_io) ··· 1422 1427 1423 1428 spin_unlock_irqrestore(&m->lock, flags); 1424 1429 1425 - return r ? : blkdev_driver_ioctl(bdev->bd_inode, &fake_file, 1426 - bdev->bd_disk, cmd, arg); 1430 + return r ? : __blkdev_driver_ioctl(bdev, mode, cmd, arg); 1427 1431 } 1428 1432 1429 1433 /*-----------------------------------------------------------------
+8 -8
drivers/md/dm-table.c
··· 43 43 * device. This should be a combination of FMODE_READ 44 44 * and FMODE_WRITE. 45 45 */ 46 - int mode; 46 + fmode_t mode; 47 47 48 48 /* a list of devices used by this table */ 49 49 struct list_head devices; ··· 217 217 return 0; 218 218 } 219 219 220 - int dm_table_create(struct dm_table **result, int mode, 220 + int dm_table_create(struct dm_table **result, fmode_t mode, 221 221 unsigned num_targets, struct mapped_device *md) 222 222 { 223 223 struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL); ··· 344 344 return PTR_ERR(bdev); 345 345 r = bd_claim_by_disk(bdev, _claim_ptr, dm_disk(md)); 346 346 if (r) 347 - blkdev_put(bdev); 347 + blkdev_put(bdev, d->dm_dev.mode); 348 348 else 349 349 d->dm_dev.bdev = bdev; 350 350 return r; ··· 359 359 return; 360 360 361 361 bd_release_from_disk(d->dm_dev.bdev, dm_disk(md)); 362 - blkdev_put(d->dm_dev.bdev); 362 + blkdev_put(d->dm_dev.bdev, d->dm_dev.mode); 363 363 d->dm_dev.bdev = NULL; 364 364 } 365 365 ··· 382 382 * careful to leave things as they were if we fail to reopen the 383 383 * device. 384 384 */ 385 - static int upgrade_mode(struct dm_dev_internal *dd, int new_mode, 385 + static int upgrade_mode(struct dm_dev_internal *dd, fmode_t new_mode, 386 386 struct mapped_device *md) 387 387 { 388 388 int r; ··· 408 408 */ 409 409 static int __table_get_device(struct dm_table *t, struct dm_target *ti, 410 410 const char *path, sector_t start, sector_t len, 411 - int mode, struct dm_dev **result) 411 + fmode_t mode, struct dm_dev **result) 412 412 { 413 413 int r; 414 414 dev_t uninitialized_var(dev); ··· 528 528 EXPORT_SYMBOL_GPL(dm_set_device_limits); 529 529 530 530 int dm_get_device(struct dm_target *ti, const char *path, sector_t start, 531 - sector_t len, int mode, struct dm_dev **result) 531 + sector_t len, fmode_t mode, struct dm_dev **result) 532 532 { 533 533 int r = __table_get_device(ti->table, ti, path, 534 534 start, len, mode, result); ··· 878 878 return &t->devices; 879 879 } 880 880 881 - int dm_table_get_mode(struct dm_table *t) 881 + fmode_t dm_table_get_mode(struct dm_table *t) 882 882 { 883 883 return t->mode; 884 884 }
+8 -19
drivers/md/dm.c
··· 21 21 #include <linux/idr.h> 22 22 #include <linux/hdreg.h> 23 23 #include <linux/blktrace_api.h> 24 - #include <linux/smp_lock.h> 25 24 26 25 #define DM_MSG_PREFIX "core" 27 26 ··· 247 248 /* 248 249 * Block device functions 249 250 */ 250 - static int dm_blk_open(struct inode *inode, struct file *file) 251 + static int dm_blk_open(struct block_device *bdev, fmode_t mode) 251 252 { 252 253 struct mapped_device *md; 253 254 254 255 spin_lock(&_minor_lock); 255 256 256 - md = inode->i_bdev->bd_disk->private_data; 257 + md = bdev->bd_disk->private_data; 257 258 if (!md) 258 259 goto out; 259 260 ··· 272 273 return md ? 0 : -ENXIO; 273 274 } 274 275 275 - static int dm_blk_close(struct inode *inode, struct file *file) 276 + static int dm_blk_close(struct gendisk *disk, fmode_t mode) 276 277 { 277 - struct mapped_device *md; 278 - 279 - md = inode->i_bdev->bd_disk->private_data; 278 + struct mapped_device *md = disk->private_data; 280 279 atomic_dec(&md->open_count); 281 280 dm_put(md); 282 281 return 0; ··· 311 314 return dm_get_geometry(md, geo); 312 315 } 313 316 314 - static int dm_blk_ioctl(struct inode *inode, struct file *file, 317 + static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode, 315 318 unsigned int cmd, unsigned long arg) 316 319 { 317 - struct mapped_device *md; 318 - struct dm_table *map; 320 + struct mapped_device *md = bdev->bd_disk->private_data; 321 + struct dm_table *map = dm_get_table(md); 319 322 struct dm_target *tgt; 320 323 int r = -ENOTTY; 321 - 322 - /* We don't really need this lock, but we do need 'inode'. */ 323 - unlock_kernel(); 324 - 325 - md = inode->i_bdev->bd_disk->private_data; 326 - 327 - map = dm_get_table(md); 328 324 329 325 if (!map || !dm_table_get_size(map)) 330 326 goto out; ··· 334 344 } 335 345 336 346 if (tgt->type->ioctl) 337 - r = tgt->type->ioctl(tgt, inode, file, cmd, arg); 347 + r = tgt->type->ioctl(tgt, cmd, arg); 338 348 339 349 out: 340 350 dm_table_put(map); 341 351 342 - lock_kernel(); 343 352 return r; 344 353 } 345 354
+10 -10
drivers/md/md.c
··· 1520 1520 if (err) { 1521 1521 printk(KERN_ERR "md: could not bd_claim %s.\n", 1522 1522 bdevname(bdev, b)); 1523 - blkdev_put(bdev); 1523 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 1524 1524 return err; 1525 1525 } 1526 1526 if (!shared) ··· 1536 1536 if (!bdev) 1537 1537 MD_BUG(); 1538 1538 bd_release(bdev); 1539 - blkdev_put(bdev); 1539 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 1540 1540 } 1541 1541 1542 1542 void md_autodetect_dev(dev_t dev); ··· 4785 4785 return 0; 4786 4786 } 4787 4787 4788 - static int md_ioctl(struct inode *inode, struct file *file, 4788 + static int md_ioctl(struct block_device *bdev, fmode_t mode, 4789 4789 unsigned int cmd, unsigned long arg) 4790 4790 { 4791 4791 int err = 0; ··· 4823 4823 * Commands creating/starting a new array: 4824 4824 */ 4825 4825 4826 - mddev = inode->i_bdev->bd_disk->private_data; 4826 + mddev = bdev->bd_disk->private_data; 4827 4827 4828 4828 if (!mddev) { 4829 4829 BUG(); ··· 4996 4996 return err; 4997 4997 } 4998 4998 4999 - static int md_open(struct inode *inode, struct file *file) 4999 + static int md_open(struct block_device *bdev, fmode_t mode) 5000 5000 { 5001 5001 /* 5002 5002 * Succeed if we can lock the mddev, which confirms that 5003 5003 * it isn't being stopped right now. 5004 5004 */ 5005 - mddev_t *mddev = inode->i_bdev->bd_disk->private_data; 5005 + mddev_t *mddev = bdev->bd_disk->private_data; 5006 5006 int err; 5007 5007 5008 5008 if ((err = mutex_lock_interruptible_nested(&mddev->reconfig_mutex, 1))) ··· 5013 5013 atomic_inc(&mddev->openers); 5014 5014 mddev_unlock(mddev); 5015 5015 5016 - check_disk_change(inode->i_bdev); 5016 + check_disk_change(bdev); 5017 5017 out: 5018 5018 return err; 5019 5019 } 5020 5020 5021 - static int md_release(struct inode *inode, struct file * file) 5021 + static int md_release(struct gendisk *disk, fmode_t mode) 5022 5022 { 5023 - mddev_t *mddev = inode->i_bdev->bd_disk->private_data; 5023 + mddev_t *mddev = disk->private_data; 5024 5024 5025 5025 BUG_ON(!mddev); 5026 5026 atomic_dec(&mddev->openers); ··· 5048 5048 .owner = THIS_MODULE, 5049 5049 .open = md_open, 5050 5050 .release = md_release, 5051 - .ioctl = md_ioctl, 5051 + .locked_ioctl = md_ioctl, 5052 5052 .getgeo = md_getgeo, 5053 5053 .media_changed = md_media_changed, 5054 5054 .revalidate_disk= md_revalidate,
+4 -5
drivers/memstick/core/mspro_block.c
··· 172 172 173 173 /*** Block device ***/ 174 174 175 - static int mspro_block_bd_open(struct inode *inode, struct file *filp) 175 + static int mspro_block_bd_open(struct block_device *bdev, fmode_t mode) 176 176 { 177 - struct gendisk *disk = inode->i_bdev->bd_disk; 177 + struct gendisk *disk = bdev->bd_disk; 178 178 struct mspro_block_data *msb = disk->private_data; 179 179 int rc = -ENXIO; 180 180 ··· 182 182 183 183 if (msb && msb->card) { 184 184 msb->usage_count++; 185 - if ((filp->f_mode & FMODE_WRITE) && msb->read_only) 185 + if ((mode & FMODE_WRITE) && msb->read_only) 186 186 rc = -EROFS; 187 187 else 188 188 rc = 0; ··· 218 218 return 0; 219 219 } 220 220 221 - static int mspro_block_bd_release(struct inode *inode, struct file *filp) 221 + static int mspro_block_bd_release(struct gendisk *disk, fmode_t mode) 222 222 { 223 - struct gendisk *disk = inode->i_bdev->bd_disk; 224 223 return mspro_block_disk_release(disk); 225 224 } 226 225
+6 -7
drivers/message/i2o/i2o_block.c
··· 575 575 * 576 576 * Returns 0 on success or negative error code on failure. 577 577 */ 578 - static int i2o_block_open(struct inode *inode, struct file *file) 578 + static int i2o_block_open(struct block_device *bdev, fmode_t mode) 579 579 { 580 - struct i2o_block_device *dev = inode->i_bdev->bd_disk->private_data; 580 + struct i2o_block_device *dev = bdev->bd_disk->private_data; 581 581 582 582 if (!dev->i2o_dev) 583 583 return -ENODEV; ··· 604 604 * 605 605 * Returns 0 on success or negative error code on failure. 606 606 */ 607 - static int i2o_block_release(struct inode *inode, struct file *file) 607 + static int i2o_block_release(struct gendisk *disk, fmode_t mode) 608 608 { 609 - struct gendisk *disk = inode->i_bdev->bd_disk; 610 609 struct i2o_block_device *dev = disk->private_data; 611 610 u8 operation; 612 611 ··· 652 653 * 653 654 * Return 0 on success or negative error on failure. 654 655 */ 655 - static int i2o_block_ioctl(struct inode *inode, struct file *file, 656 + static int i2o_block_ioctl(struct block_device *bdev, fmode_t mode, 656 657 unsigned int cmd, unsigned long arg) 657 658 { 658 - struct gendisk *disk = inode->i_bdev->bd_disk; 659 + struct gendisk *disk = bdev->bd_disk; 659 660 struct i2o_block_device *dev = disk->private_data; 660 661 661 662 /* Anyone capable of this syscall can do *real bad* things */ ··· 932 933 .owner = THIS_MODULE, 933 934 .open = i2o_block_open, 934 935 .release = i2o_block_release, 935 - .ioctl = i2o_block_ioctl, 936 + .locked_ioctl = i2o_block_ioctl, 936 937 .getgeo = i2o_block_getgeo, 937 938 .media_changed = i2o_block_media_changed 938 939 };
+6 -7
drivers/mmc/card/block.c
··· 92 92 mutex_unlock(&open_lock); 93 93 } 94 94 95 - static int mmc_blk_open(struct inode *inode, struct file *filp) 95 + static int mmc_blk_open(struct block_device *bdev, fmode_t mode) 96 96 { 97 - struct mmc_blk_data *md; 97 + struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk); 98 98 int ret = -ENXIO; 99 99 100 - md = mmc_blk_get(inode->i_bdev->bd_disk); 101 100 if (md) { 102 101 if (md->usage == 2) 103 - check_disk_change(inode->i_bdev); 102 + check_disk_change(bdev); 104 103 ret = 0; 105 104 106 - if ((filp->f_mode & FMODE_WRITE) && md->read_only) { 105 + if ((mode & FMODE_WRITE) && md->read_only) { 107 106 mmc_blk_put(md); 108 107 ret = -EROFS; 109 108 } ··· 111 112 return ret; 112 113 } 113 114 114 - static int mmc_blk_release(struct inode *inode, struct file *filp) 115 + static int mmc_blk_release(struct gendisk *disk, fmode_t mode) 115 116 { 116 - struct mmc_blk_data *md = inode->i_bdev->bd_disk->private_data; 117 + struct mmc_blk_data *md = disk->private_data; 117 118 118 119 mmc_blk_put(md); 119 120 return 0;
+2 -2
drivers/mtd/devices/block2mtd.c
··· 224 224 if (dev->blkdev) { 225 225 invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping, 226 226 0, -1); 227 - close_bdev_excl(dev->blkdev); 227 + close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE); 228 228 } 229 229 230 230 kfree(dev); ··· 246 246 return NULL; 247 247 248 248 /* Get a handle on the device */ 249 - bdev = open_bdev_excl(devname, O_RDWR, NULL); 249 + bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, NULL); 250 250 #ifndef MODULE 251 251 if (IS_ERR(bdev)) { 252 252
+9 -15
drivers/mtd/mtd_blkdevs.c
··· 133 133 } 134 134 135 135 136 - static int blktrans_open(struct inode *i, struct file *f) 136 + static int blktrans_open(struct block_device *bdev, fmode_t mode) 137 137 { 138 - struct mtd_blktrans_dev *dev; 139 - struct mtd_blktrans_ops *tr; 138 + struct mtd_blktrans_dev *dev = bdev->bd_disk->private_data; 139 + struct mtd_blktrans_ops *tr = dev->tr; 140 140 int ret = -ENODEV; 141 - 142 - dev = i->i_bdev->bd_disk->private_data; 143 - tr = dev->tr; 144 141 145 142 if (!try_module_get(dev->mtd->owner)) 146 143 goto out; ··· 161 164 return ret; 162 165 } 163 166 164 - static int blktrans_release(struct inode *i, struct file *f) 167 + static int blktrans_release(struct gendisk *disk, fmode_t mode) 165 168 { 166 - struct mtd_blktrans_dev *dev; 167 - struct mtd_blktrans_ops *tr; 169 + struct mtd_blktrans_dev *dev = disk->private_data; 170 + struct mtd_blktrans_ops *tr = dev->tr; 168 171 int ret = 0; 169 - 170 - dev = i->i_bdev->bd_disk->private_data; 171 - tr = dev->tr; 172 172 173 173 if (tr->release) 174 174 ret = tr->release(dev); ··· 188 194 return -ENOTTY; 189 195 } 190 196 191 - static int blktrans_ioctl(struct inode *inode, struct file *file, 197 + static int blktrans_ioctl(struct block_device *bdev, fmode_t mode, 192 198 unsigned int cmd, unsigned long arg) 193 199 { 194 - struct mtd_blktrans_dev *dev = inode->i_bdev->bd_disk->private_data; 200 + struct mtd_blktrans_dev *dev = bdev->bd_disk->private_data; 195 201 struct mtd_blktrans_ops *tr = dev->tr; 196 202 197 203 switch (cmd) { ··· 209 215 .owner = THIS_MODULE, 210 216 .open = blktrans_open, 211 217 .release = blktrans_release, 212 - .ioctl = blktrans_ioctl, 218 + .locked_ioctl = blktrans_ioctl, 213 219 .getgeo = blktrans_getgeo, 214 220 }; 215 221
+5 -5
drivers/mtd/mtdchar.c
··· 96 96 return -ENODEV; 97 97 98 98 /* You can't open the RO devices RW */ 99 - if ((file->f_mode & 2) && (minor & 1)) 99 + if ((file->f_mode & FMODE_WRITE) && (minor & 1)) 100 100 return -EACCES; 101 101 102 102 lock_kernel(); ··· 114 114 } 115 115 116 116 /* You can't open it RW if it's not a writeable device */ 117 - if ((file->f_mode & 2) && !(mtd->flags & MTD_WRITEABLE)) { 117 + if ((file->f_mode & FMODE_WRITE) && !(mtd->flags & MTD_WRITEABLE)) { 118 118 put_mtd_device(mtd); 119 119 ret = -EACCES; 120 120 goto out; ··· 144 144 DEBUG(MTD_DEBUG_LEVEL0, "MTD_close\n"); 145 145 146 146 /* Only sync if opened RW */ 147 - if ((file->f_mode & 2) && mtd->sync) 147 + if ((file->f_mode & FMODE_WRITE) && mtd->sync) 148 148 mtd->sync(mtd); 149 149 150 150 put_mtd_device(mtd); ··· 443 443 { 444 444 struct erase_info *erase; 445 445 446 - if(!(file->f_mode & 2)) 446 + if(!(file->f_mode & FMODE_WRITE)) 447 447 return -EPERM; 448 448 449 449 erase=kzalloc(sizeof(struct erase_info),GFP_KERNEL); ··· 497 497 struct mtd_oob_buf __user *user_buf = argp; 498 498 uint32_t retlen; 499 499 500 - if(!(file->f_mode & 2)) 500 + if(!(file->f_mode & FMODE_WRITE)) 501 501 return -EPERM; 502 502 503 503 if (copy_from_user(&buf, argp, sizeof(struct mtd_oob_buf)))
+1 -1
drivers/parisc/eisa_eeprom.c
··· 86 86 { 87 87 cycle_kernel_lock(); 88 88 89 - if (file->f_mode & 2) 89 + if (file->f_mode & FMODE_WRITE) 90 90 return -EINVAL; 91 91 92 92 return 0;
+4 -7
drivers/s390/block/dasd.c
··· 2011 2011 spin_unlock_irq(&block->request_queue_lock); 2012 2012 } 2013 2013 2014 - static int dasd_open(struct inode *inp, struct file *filp) 2014 + static int dasd_open(struct block_device *bdev, fmode_t mode) 2015 2015 { 2016 - struct gendisk *disk = inp->i_bdev->bd_disk; 2017 - struct dasd_block *block = disk->private_data; 2016 + struct dasd_block *block = bdev->bd_disk->private_data; 2018 2017 struct dasd_device *base = block->base; 2019 2018 int rc; 2020 2019 ··· 2051 2052 return rc; 2052 2053 } 2053 2054 2054 - static int dasd_release(struct inode *inp, struct file *filp) 2055 + static int dasd_release(struct gendisk *disk, fmode_t mode) 2055 2056 { 2056 - struct gendisk *disk = inp->i_bdev->bd_disk; 2057 2057 struct dasd_block *block = disk->private_data; 2058 2058 2059 2059 atomic_dec(&block->open_count); ··· 2087 2089 .owner = THIS_MODULE, 2088 2090 .open = dasd_open, 2089 2091 .release = dasd_release, 2090 - .ioctl = dasd_ioctl, 2091 - .compat_ioctl = dasd_compat_ioctl, 2092 + .locked_ioctl = dasd_ioctl, 2092 2093 .getgeo = dasd_getgeo, 2093 2094 }; 2094 2095
+2 -2
drivers/s390/block/dasd_genhd.c
··· 99 99 struct block_device *bdev; 100 100 101 101 bdev = bdget_disk(block->gdp, 0); 102 - if (!bdev || blkdev_get(bdev, FMODE_READ, 1) < 0) 102 + if (!bdev || blkdev_get(bdev, FMODE_READ) < 0) 103 103 return -ENODEV; 104 104 /* 105 105 * See fs/partition/check.c:register_disk,rescan_partitions ··· 152 152 153 153 invalidate_partition(block->gdp, 0); 154 154 /* Matching blkdev_put to the blkdev_get in dasd_scan_partitions. */ 155 - blkdev_put(bdev); 155 + blkdev_put(bdev, FMODE_READ); 156 156 set_capacity(block->gdp, 0); 157 157 } 158 158
+1 -2
drivers/s390/block/dasd_int.h
··· 610 610 void dasd_destroy_partitions(struct dasd_block *); 611 611 612 612 /* externals in dasd_ioctl.c */ 613 - int dasd_ioctl(struct inode *, struct file *, unsigned int, unsigned long); 614 - long dasd_compat_ioctl(struct file *, unsigned int, unsigned long); 613 + int dasd_ioctl(struct block_device *, fmode_t, unsigned int, unsigned long); 615 614 616 615 /* externals in dasd_proc.c */ 617 616 int dasd_proc_init(void);
+1 -14
drivers/s390/block/dasd_ioctl.c
··· 366 366 } 367 367 368 368 int 369 - dasd_ioctl(struct inode *inode, struct file *file, 369 + dasd_ioctl(struct block_device *bdev, fmode_t mode, 370 370 unsigned int cmd, unsigned long arg) 371 371 { 372 - struct block_device *bdev = inode->i_bdev; 373 372 struct dasd_block *block = bdev->bd_disk->private_data; 374 373 void __user *argp = (void __user *)arg; 375 374 ··· 419 420 420 421 return -EINVAL; 421 422 } 422 - } 423 - 424 - long 425 - dasd_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 426 - { 427 - int rval; 428 - 429 - lock_kernel(); 430 - rval = dasd_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); 431 - unlock_kernel(); 432 - 433 - return (rval == -EINVAL) ? -ENOIOCTLCMD : rval; 434 423 }
+8 -9
drivers/s390/block/dcssblk.c
··· 31 31 #define PRINT_WARN(x...) printk(KERN_WARNING DCSSBLK_NAME " warning: " x) 32 32 #define PRINT_ERR(x...) printk(KERN_ERR DCSSBLK_NAME " error: " x) 33 33 34 - static int dcssblk_open(struct inode *inode, struct file *filp); 35 - static int dcssblk_release(struct inode *inode, struct file *filp); 34 + static int dcssblk_open(struct block_device *bdev, fmode_t mode); 35 + static int dcssblk_release(struct gendisk *disk, fmode_t mode); 36 36 static int dcssblk_make_request(struct request_queue *q, struct bio *bio); 37 37 static int dcssblk_direct_access(struct block_device *bdev, sector_t secnum, 38 38 void **kaddr, unsigned long *pfn); ··· 776 776 } 777 777 778 778 static int 779 - dcssblk_open(struct inode *inode, struct file *filp) 779 + dcssblk_open(struct block_device *bdev, fmode_t mode) 780 780 { 781 781 struct dcssblk_dev_info *dev_info; 782 782 int rc; 783 783 784 - dev_info = inode->i_bdev->bd_disk->private_data; 784 + dev_info = bdev->bd_disk->private_data; 785 785 if (NULL == dev_info) { 786 786 rc = -ENODEV; 787 787 goto out; 788 788 } 789 789 atomic_inc(&dev_info->use_count); 790 - inode->i_bdev->bd_block_size = 4096; 790 + bdev->bd_block_size = 4096; 791 791 rc = 0; 792 792 out: 793 793 return rc; 794 794 } 795 795 796 796 static int 797 - dcssblk_release(struct inode *inode, struct file *filp) 797 + dcssblk_release(struct gendisk *disk, fmode_t mode) 798 798 { 799 - struct dcssblk_dev_info *dev_info; 799 + struct dcssblk_dev_info *dev_info = disk->private_data; 800 800 struct segment_info *entry; 801 801 int rc; 802 802 803 - dev_info = inode->i_bdev->bd_disk->private_data; 804 - if (NULL == dev_info) { 803 + if (!dev_info) { 805 804 rc = -ENODEV; 806 805 goto out; 807 806 }
+11 -14
drivers/s390/char/tape_block.c
··· 43 43 /* 44 44 * file operation structure for tape block frontend 45 45 */ 46 - static int tapeblock_open(struct inode *, struct file *); 47 - static int tapeblock_release(struct inode *, struct file *); 48 - static int tapeblock_ioctl(struct inode *, struct file *, unsigned int, 46 + static int tapeblock_open(struct block_device *, fmode_t); 47 + static int tapeblock_release(struct gendisk *, fmode_t); 48 + static int tapeblock_ioctl(struct block_device *, fmode_t, unsigned int, 49 49 unsigned long); 50 50 static int tapeblock_medium_changed(struct gendisk *); 51 51 static int tapeblock_revalidate_disk(struct gendisk *); ··· 54 54 .owner = THIS_MODULE, 55 55 .open = tapeblock_open, 56 56 .release = tapeblock_release, 57 - .ioctl = tapeblock_ioctl, 57 + .locked_ioctl = tapeblock_ioctl, 58 58 .media_changed = tapeblock_medium_changed, 59 59 .revalidate_disk = tapeblock_revalidate_disk, 60 60 }; ··· 364 364 * Block frontend tape device open function. 365 365 */ 366 366 static int 367 - tapeblock_open(struct inode *inode, struct file *filp) 367 + tapeblock_open(struct block_device *bdev, fmode_t mode) 368 368 { 369 - struct gendisk * disk; 369 + struct gendisk * disk = bdev->bd_disk; 370 370 struct tape_device * device; 371 371 int rc; 372 372 373 - disk = inode->i_bdev->bd_disk; 374 373 device = tape_get_device_reference(disk->private_data); 375 374 376 375 if (device->required_tapemarks) { ··· 409 410 * we just get the pointer here and release the reference. 410 411 */ 411 412 static int 412 - tapeblock_release(struct inode *inode, struct file *filp) 413 + tapeblock_release(struct gendisk *disk, fmode_t mode) 413 414 { 414 - struct gendisk *disk = inode->i_bdev->bd_disk; 415 415 struct tape_device *device = disk->private_data; 416 416 417 417 tape_state_set(device, TS_IN_USE); ··· 425 427 */ 426 428 static int 427 429 tapeblock_ioctl( 428 - struct inode * inode, 429 - struct file * file, 430 + struct block_device * bdev, 431 + fmode_t mode, 430 432 unsigned int command, 431 433 unsigned long arg 432 434 ) { 433 435 int rc; 434 436 int minor; 435 - struct gendisk *disk; 437 + struct gendisk *disk = bdev->bd_disk; 436 438 struct tape_device *device; 437 439 438 440 rc = 0; 439 - disk = inode->i_bdev->bd_disk; 440 441 BUG_ON(!disk); 441 442 device = disk->private_data; 442 443 BUG_ON(!device); 443 - minor = iminor(inode); 444 + minor = MINOR(bdev->bd_dev); 444 445 445 446 DBF_LH(6, "tapeblock_ioctl(0x%0x)\n", command); 446 447 DBF_LH(6, "device = %d:%d\n", tapeblock_major, minor);
+8 -14
drivers/scsi/ide-scsi.c
··· 452 452 #endif 453 453 }; 454 454 455 - static int idescsi_ide_open(struct inode *inode, struct file *filp) 455 + static int idescsi_ide_open(struct block_device *bdev, fmode_t mode) 456 456 { 457 - struct gendisk *disk = inode->i_bdev->bd_disk; 458 - struct ide_scsi_obj *scsi; 457 + struct ide_scsi_obj *scsi = ide_scsi_get(bdev->bd_disk); 459 458 460 - if (!(scsi = ide_scsi_get(disk))) 459 + if (!scsi) 461 460 return -ENXIO; 462 461 463 462 return 0; 464 463 } 465 464 466 - static int idescsi_ide_release(struct inode *inode, struct file *filp) 465 + static int idescsi_ide_release(struct gendisk *disk, fmode_t mode) 467 466 { 468 - struct gendisk *disk = inode->i_bdev->bd_disk; 469 - struct ide_scsi_obj *scsi = ide_scsi_g(disk); 470 - 471 - ide_scsi_put(scsi); 472 - 467 + ide_scsi_put(ide_scsi_g(disk)); 473 468 return 0; 474 469 } 475 470 476 - static int idescsi_ide_ioctl(struct inode *inode, struct file *file, 471 + static int idescsi_ide_ioctl(struct block_device *bdev, fmode_t mode, 477 472 unsigned int cmd, unsigned long arg) 478 473 { 479 - struct block_device *bdev = inode->i_bdev; 480 474 struct ide_scsi_obj *scsi = ide_scsi_g(bdev->bd_disk); 481 - return generic_ide_ioctl(scsi->drive, file, bdev, cmd, arg); 475 + return generic_ide_ioctl(scsi->drive, bdev, cmd, arg); 482 476 } 483 477 484 478 static struct block_device_operations idescsi_ops = { 485 479 .owner = THIS_MODULE, 486 480 .open = idescsi_ide_open, 487 481 .release = idescsi_ide_release, 488 - .ioctl = idescsi_ide_ioctl, 482 + .locked_ioctl = idescsi_ide_ioctl, 489 483 }; 490 484 491 485 static int idescsi_slave_configure(struct scsi_device * sdp)
+3 -3
drivers/scsi/scsi_ioctl.c
··· 237 237 case SCSI_IOCTL_SEND_COMMAND: 238 238 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO)) 239 239 return -EACCES; 240 - return sg_scsi_ioctl(NULL, sdev->request_queue, NULL, arg); 240 + return sg_scsi_ioctl(sdev->request_queue, NULL, 0, arg); 241 241 case SCSI_IOCTL_DOORLOCK: 242 242 return scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT); 243 243 case SCSI_IOCTL_DOORUNLOCK: ··· 277 277 * @filp: either NULL or a &struct file which must have the O_NONBLOCK flag. 278 278 */ 279 279 int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd, 280 - void __user *arg, struct file *filp) 280 + void __user *arg, int ndelay) 281 281 { 282 282 int val, result; 283 283 284 284 /* The first set of iocts may be executed even if we're doing 285 285 * error processing, as long as the device was opened 286 286 * non-blocking */ 287 - if (filp && (filp->f_flags & O_NONBLOCK)) { 287 + if (ndelay) { 288 288 if (scsi_host_in_recovery(sdev->host)) 289 289 return -ENODEV; 290 290 } else if (!scsi_block_when_processing_errors(sdev))
+15 -20
drivers/scsi/sd.c
··· 609 609 * In the latter case @inode and @filp carry an abridged amount 610 610 * of information as noted above. 611 611 **/ 612 - static int sd_open(struct inode *inode, struct file *filp) 612 + static int sd_open(struct block_device *bdev, fmode_t mode) 613 613 { 614 - struct gendisk *disk = inode->i_bdev->bd_disk; 615 - struct scsi_disk *sdkp; 614 + struct scsi_disk *sdkp = scsi_disk_get(bdev->bd_disk); 616 615 struct scsi_device *sdev; 617 616 int retval; 618 617 619 - if (!(sdkp = scsi_disk_get(disk))) 618 + if (!sdkp) 620 619 return -ENXIO; 621 - 622 620 623 621 SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_open\n")); 624 622 ··· 631 633 goto error_out; 632 634 633 635 if (sdev->removable || sdkp->write_prot) 634 - check_disk_change(inode->i_bdev); 636 + check_disk_change(bdev); 635 637 636 638 /* 637 639 * If the drive is empty, just let the open fail. 638 640 */ 639 641 retval = -ENOMEDIUM; 640 - if (sdev->removable && !sdkp->media_present && 641 - !(filp->f_flags & O_NDELAY)) 642 + if (sdev->removable && !sdkp->media_present && !(mode & FMODE_NDELAY)) 642 643 goto error_out; 643 644 644 645 /* ··· 645 648 * if the user expects to be able to write to the thing. 646 649 */ 647 650 retval = -EROFS; 648 - if (sdkp->write_prot && (filp->f_mode & FMODE_WRITE)) 651 + if (sdkp->write_prot && (mode & FMODE_WRITE)) 649 652 goto error_out; 650 653 651 654 /* ··· 681 684 * Note: may block (uninterruptible) if error recovery is underway 682 685 * on this disk. 683 686 **/ 684 - static int sd_release(struct inode *inode, struct file *filp) 687 + static int sd_release(struct gendisk *disk, fmode_t mode) 685 688 { 686 - struct gendisk *disk = inode->i_bdev->bd_disk; 687 689 struct scsi_disk *sdkp = scsi_disk(disk); 688 690 struct scsi_device *sdev = sdkp->device; 689 691 ··· 739 743 * Note: most ioctls are forward onto the block subsystem or further 740 744 * down in the scsi subsystem. 741 745 **/ 742 - static int sd_ioctl(struct inode * inode, struct file * filp, 746 + static int sd_ioctl(struct block_device *bdev, fmode_t mode, 743 747 unsigned int cmd, unsigned long arg) 744 748 { 745 - struct block_device *bdev = inode->i_bdev; 746 749 struct gendisk *disk = bdev->bd_disk; 747 750 struct scsi_device *sdp = scsi_disk(disk)->device; 748 751 void __user *p = (void __user *)arg; ··· 756 761 * may try and take the device offline, in which case all further 757 762 * access to the device is prohibited. 758 763 */ 759 - error = scsi_nonblockable_ioctl(sdp, cmd, p, filp); 764 + error = scsi_nonblockable_ioctl(sdp, cmd, p, 765 + (mode & FMODE_NDELAY_NOW) != 0); 760 766 if (!scsi_block_when_processing_errors(sdp) || !error) 761 767 return error; 762 768 ··· 771 775 case SCSI_IOCTL_GET_BUS_NUMBER: 772 776 return scsi_ioctl(sdp, cmd, p); 773 777 default: 774 - error = scsi_cmd_ioctl(filp, disk->queue, disk, cmd, p); 778 + error = scsi_cmd_ioctl(disk->queue, disk, mode, cmd, p); 775 779 if (error != -ENOTTY) 776 780 return error; 777 781 } ··· 924 928 * This gets directly called from VFS. When the ioctl 925 929 * is not recognized we go back to the other translation paths. 926 930 */ 927 - static long sd_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 931 + static int sd_compat_ioctl(struct block_device *bdev, fmode_t mode, 932 + unsigned int cmd, unsigned long arg) 928 933 { 929 - struct block_device *bdev = file->f_path.dentry->d_inode->i_bdev; 930 - struct gendisk *disk = bdev->bd_disk; 931 - struct scsi_device *sdev = scsi_disk(disk)->device; 934 + struct scsi_device *sdev = scsi_disk(bdev->bd_disk)->device; 932 935 933 936 /* 934 937 * If we are in the middle of error recovery, don't let anyone ··· 957 962 .owner = THIS_MODULE, 958 963 .open = sd_open, 959 964 .release = sd_release, 960 - .ioctl = sd_ioctl, 965 + .locked_ioctl = sd_ioctl, 961 966 .getgeo = sd_getgeo, 962 967 #ifdef CONFIG_COMPAT 963 968 .compat_ioctl = sd_compat_ioctl,
+1 -1
drivers/scsi/sg.c
··· 1059 1059 if (sg_allow_access(filp, &opcode)) 1060 1060 return -EPERM; 1061 1061 } 1062 - return sg_scsi_ioctl(filp, sdp->device->request_queue, NULL, p); 1062 + return sg_scsi_ioctl(sdp->device->request_queue, NULL, filp->f_mode, p); 1063 1063 case SG_SET_DEBUG: 1064 1064 result = get_user(val, ip); 1065 1065 if (result)
+17 -23
drivers/scsi/sr.c
··· 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, file)) != 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 - int ret; 492 - 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 - 489 + struct scsi_cd *cd = scsi_cd(disk); 490 + cdrom_release(&cd->cdi, mode); 497 491 scsi_cd_put(cd); 498 - 499 492 return 0; 500 493 } 501 494 502 - 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, 503 496 unsigned long arg) 504 497 { 505 - struct scsi_cd *cd = scsi_cd(inode->i_bdev->bd_disk); 498 + struct scsi_cd *cd = scsi_cd(bdev->bd_disk); 506 499 struct scsi_device *sdev = cd->device; 507 500 void __user *argp = (void __user *)arg; 508 501 int ret; ··· 510 517 return scsi_ioctl(sdev, cmd, argp); 511 518 } 512 519 513 - ret = cdrom_ioctl(file, &cd->cdi, inode, cmd, arg); 520 + ret = cdrom_ioctl(&cd->cdi, bdev, mode, cmd, arg); 514 521 if (ret != -ENOSYS) 515 522 return ret; 516 523 ··· 520 527 * case fall through to scsi_ioctl, which will return ENDOEV again 521 528 * if it doesn't recognise the ioctl 522 529 */ 523 - ret = scsi_nonblockable_ioctl(sdev, cmd, argp, NULL); 530 + ret = scsi_nonblockable_ioctl(sdev, cmd, argp, 531 + (mode & FMODE_NDELAY_NOW) != 0); 524 532 if (ret != -ENODEV) 525 533 return ret; 526 534 return scsi_ioctl(sdev, cmd, argp); ··· 538 544 .owner = THIS_MODULE, 539 545 .open = sr_block_open, 540 546 .release = sr_block_release, 541 - .ioctl = sr_block_ioctl, 547 + .locked_ioctl = sr_block_ioctl, 542 548 .media_changed = sr_block_media_changed, 543 549 /* 544 550 * No compat_ioctl for now because sr_block_ioctl never
+4 -3
drivers/scsi/st.c
··· 3263 3263 * may try and take the device offline, in which case all further 3264 3264 * access to the device is prohibited. 3265 3265 */ 3266 - retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p, file); 3266 + retval = scsi_nonblockable_ioctl(STp->device, cmd_in, p, 3267 + file->f_flags & O_NDELAY); 3267 3268 if (!scsi_block_when_processing_errors(STp->device) || retval != -ENODEV) 3268 3269 goto out; 3269 3270 retval = 0; ··· 3568 3567 !capable(CAP_SYS_RAWIO)) 3569 3568 i = -EPERM; 3570 3569 else 3571 - i = scsi_cmd_ioctl(file, STp->disk->queue, 3572 - STp->disk, cmd_in, p); 3570 + i = scsi_cmd_ioctl(STp->disk->queue, STp->disk, 3571 + file->f_mode, cmd_in, p); 3573 3572 if (i != -ENOTTY) 3574 3573 return i; 3575 3574 break;
+49 -62
fs/block_dev.c
··· 840 840 * to be used for internal purposes. If you ever need it - reconsider 841 841 * your API. 842 842 */ 843 - struct block_device *open_by_devnum(dev_t dev, unsigned mode) 843 + struct block_device *open_by_devnum(dev_t dev, fmode_t mode) 844 844 { 845 845 struct block_device *bdev = bdget(dev); 846 846 int err = -ENOMEM; 847 - int flags = mode & FMODE_WRITE ? O_RDWR : O_RDONLY; 848 847 if (bdev) 849 - err = blkdev_get(bdev, mode, flags); 848 + err = blkdev_get(bdev, mode); 850 849 return err ? ERR_PTR(err) : bdev; 851 850 } 852 851 ··· 974 975 } 975 976 EXPORT_SYMBOL(bd_set_size); 976 977 977 - static int __blkdev_get(struct block_device *bdev, mode_t mode, unsigned flags, 978 - int for_part); 979 - static int __blkdev_put(struct block_device *bdev, int for_part); 978 + static int __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part); 980 979 981 980 /* 982 981 * bd_mutex locking: ··· 983 986 * mutex_lock_nested(whole->bd_mutex, 1) 984 987 */ 985 988 986 - static int do_open(struct block_device *bdev, struct file *file, int for_part) 989 + static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part) 987 990 { 988 991 struct gendisk *disk; 989 992 struct hd_struct *part = NULL; ··· 991 994 int partno; 992 995 int perm = 0; 993 996 994 - if (file->f_mode & FMODE_READ) 997 + if (mode & FMODE_READ) 995 998 perm |= MAY_READ; 996 - if (file->f_mode & FMODE_WRITE) 999 + if (mode & FMODE_WRITE) 997 1000 perm |= MAY_WRITE; 998 1001 /* 999 1002 * hooks: /n/, see "layering violations". ··· 1005 1008 } 1006 1009 1007 1010 ret = -ENXIO; 1008 - file->f_mapping = bdev->bd_inode->i_mapping; 1009 1011 1010 1012 lock_kernel(); 1011 1013 ··· 1023 1027 if (!partno) { 1024 1028 struct backing_dev_info *bdi; 1025 1029 if (disk->fops->open) { 1026 - ret = disk->fops->open(bdev->bd_inode, file); 1030 + ret = disk->fops->open(bdev, mode); 1027 1031 if (ret) 1028 1032 goto out_clear; 1029 1033 } ··· 1043 1047 if (!whole) 1044 1048 goto out_clear; 1045 1049 BUG_ON(for_part); 1046 - ret = __blkdev_get(whole, file->f_mode, file->f_flags, 1); 1050 + ret = __blkdev_get(whole, mode, 1); 1047 1051 if (ret) 1048 1052 goto out_clear; 1049 1053 bdev->bd_contains = whole; ··· 1064 1068 disk = NULL; 1065 1069 if (bdev->bd_contains == bdev) { 1066 1070 if (bdev->bd_disk->fops->open) { 1067 - ret = bdev->bd_disk->fops->open(bdev->bd_inode, file); 1071 + ret = bdev->bd_disk->fops->open(bdev, mode); 1068 1072 if (ret) 1069 1073 goto out_unlock_bdev; 1070 1074 } ··· 1084 1088 bdev->bd_part = NULL; 1085 1089 bdev->bd_inode->i_data.backing_dev_info = &default_backing_dev_info; 1086 1090 if (bdev != bdev->bd_contains) 1087 - __blkdev_put(bdev->bd_contains, 1); 1091 + __blkdev_put(bdev->bd_contains, mode, 1); 1088 1092 bdev->bd_contains = NULL; 1089 1093 out_unlock_bdev: 1090 1094 mutex_unlock(&bdev->bd_mutex); ··· 1100 1104 return ret; 1101 1105 } 1102 1106 1103 - static int __blkdev_get(struct block_device *bdev, mode_t mode, unsigned flags, 1104 - int for_part) 1107 + int blkdev_get(struct block_device *bdev, fmode_t mode) 1105 1108 { 1106 - /* 1107 - * This crockload is due to bad choice of ->open() type. 1108 - * It will go away. 1109 - * For now, block device ->open() routine must _not_ 1110 - * examine anything in 'inode' argument except ->i_rdev. 1111 - */ 1112 - struct file fake_file = {}; 1113 - struct dentry fake_dentry = {}; 1114 - fake_file.f_mode = mode; 1115 - fake_file.f_flags = flags; 1116 - fake_file.f_path.dentry = &fake_dentry; 1117 - fake_dentry.d_inode = bdev->bd_inode; 1118 - 1119 - return do_open(bdev, &fake_file, for_part); 1120 - } 1121 - 1122 - int blkdev_get(struct block_device *bdev, mode_t mode, unsigned flags) 1123 - { 1124 - return __blkdev_get(bdev, mode, flags, 0); 1109 + return __blkdev_get(bdev, mode, 0); 1125 1110 } 1126 1111 EXPORT_SYMBOL(blkdev_get); 1127 1112 ··· 1119 1142 */ 1120 1143 filp->f_flags |= O_LARGEFILE; 1121 1144 1145 + if (filp->f_flags & O_NDELAY) 1146 + filp->f_mode |= FMODE_NDELAY; 1147 + if (filp->f_flags & O_EXCL) 1148 + filp->f_mode |= FMODE_EXCL; 1149 + if ((filp->f_flags & O_ACCMODE) == 3) 1150 + filp->f_mode |= FMODE_WRITE_IOCTL; 1151 + 1122 1152 bdev = bd_acquire(inode); 1123 1153 if (bdev == NULL) 1124 1154 return -ENOMEM; 1125 1155 1126 - res = do_open(bdev, filp, 0); 1156 + filp->f_mapping = bdev->bd_inode->i_mapping; 1157 + 1158 + res = blkdev_get(bdev, filp->f_mode); 1127 1159 if (res) 1128 1160 return res; 1129 1161 1130 - if (!(filp->f_flags & O_EXCL) ) 1162 + if (!(filp->f_mode & FMODE_EXCL)) 1131 1163 return 0; 1132 1164 1133 1165 if (!(res = bd_claim(bdev, filp))) 1134 1166 return 0; 1135 1167 1136 - blkdev_put(bdev); 1168 + blkdev_put(bdev, filp->f_mode); 1137 1169 return res; 1138 1170 } 1139 1171 1140 - static int __blkdev_put(struct block_device *bdev, int for_part) 1172 + static int __blkdev_put(struct block_device *bdev, fmode_t mode, int for_part) 1141 1173 { 1142 1174 int ret = 0; 1143 - struct inode *bd_inode = bdev->bd_inode; 1144 1175 struct gendisk *disk = bdev->bd_disk; 1145 1176 struct block_device *victim = NULL; 1146 1177 ··· 1163 1178 } 1164 1179 if (bdev->bd_contains == bdev) { 1165 1180 if (disk->fops->release) 1166 - ret = disk->fops->release(bd_inode, NULL); 1181 + ret = disk->fops->release(disk, mode); 1167 1182 } 1168 1183 if (!bdev->bd_openers) { 1169 1184 struct module *owner = disk->fops->owner; ··· 1182 1197 mutex_unlock(&bdev->bd_mutex); 1183 1198 bdput(bdev); 1184 1199 if (victim) 1185 - __blkdev_put(victim, 1); 1200 + __blkdev_put(victim, mode, 1); 1186 1201 return ret; 1187 1202 } 1188 1203 1189 - int blkdev_put(struct block_device *bdev) 1204 + int blkdev_put(struct block_device *bdev, fmode_t mode) 1190 1205 { 1191 - return __blkdev_put(bdev, 0); 1206 + return __blkdev_put(bdev, mode, 0); 1192 1207 } 1193 1208 EXPORT_SYMBOL(blkdev_put); 1194 1209 ··· 1197 1212 struct block_device *bdev = I_BDEV(filp->f_mapping->host); 1198 1213 if (bdev->bd_holder == filp) 1199 1214 bd_release(bdev); 1200 - return blkdev_put(bdev); 1215 + return blkdev_put(bdev, filp->f_mode); 1201 1216 } 1202 1217 1203 1218 static long block_ioctl(struct file *file, unsigned cmd, unsigned long arg) 1204 1219 { 1205 - return blkdev_ioctl(file->f_mapping->host, file, cmd, arg); 1220 + struct block_device *bdev = I_BDEV(file->f_mapping->host); 1221 + fmode_t mode = file->f_mode; 1222 + if (file->f_flags & O_NDELAY) 1223 + mode |= FMODE_NDELAY_NOW; 1224 + return blkdev_ioctl(bdev, mode, cmd, arg); 1206 1225 } 1207 1226 1208 1227 static const struct address_space_operations def_blk_aops = { ··· 1242 1253 int res; 1243 1254 mm_segment_t old_fs = get_fs(); 1244 1255 set_fs(KERNEL_DS); 1245 - res = blkdev_ioctl(bdev->bd_inode, NULL, cmd, arg); 1256 + res = blkdev_ioctl(bdev, 0, cmd, arg); 1246 1257 set_fs(old_fs); 1247 1258 return res; 1248 1259 } ··· 1292 1303 EXPORT_SYMBOL(lookup_bdev); 1293 1304 1294 1305 /** 1295 - * open_bdev_excl - open a block device by name and set it up for use 1306 + * open_bdev_exclusive - open a block device by name and set it up for use 1296 1307 * 1297 1308 * @path: special file representing the block device 1298 - * @flags: %MS_RDONLY for opening read-only 1309 + * @mode: FMODE_... combination to pass be used 1299 1310 * @holder: owner for exclusion 1300 1311 * 1301 1312 * Open the blockdevice described by the special file at @path, claim it 1302 1313 * for the @holder. 1303 1314 */ 1304 - struct block_device *open_bdev_excl(const char *path, int flags, void *holder) 1315 + struct block_device *open_bdev_exclusive(const char *path, fmode_t mode, void *holder) 1305 1316 { 1306 1317 struct block_device *bdev; 1307 - mode_t mode = FMODE_READ; 1308 1318 int error = 0; 1309 1319 1310 1320 bdev = lookup_bdev(path); 1311 1321 if (IS_ERR(bdev)) 1312 1322 return bdev; 1313 1323 1314 - if (!(flags & MS_RDONLY)) 1315 - mode |= FMODE_WRITE; 1316 - error = blkdev_get(bdev, mode, 0); 1324 + error = blkdev_get(bdev, mode); 1317 1325 if (error) 1318 1326 return ERR_PTR(error); 1319 1327 error = -EACCES; 1320 - if (!(flags & MS_RDONLY) && bdev_read_only(bdev)) 1328 + if ((mode & FMODE_WRITE) && bdev_read_only(bdev)) 1321 1329 goto blkdev_put; 1322 1330 error = bd_claim(bdev, holder); 1323 1331 if (error) ··· 1323 1337 return bdev; 1324 1338 1325 1339 blkdev_put: 1326 - blkdev_put(bdev); 1340 + blkdev_put(bdev, mode); 1327 1341 return ERR_PTR(error); 1328 1342 } 1329 1343 1330 - EXPORT_SYMBOL(open_bdev_excl); 1344 + EXPORT_SYMBOL(open_bdev_exclusive); 1331 1345 1332 1346 /** 1333 - * close_bdev_excl - release a blockdevice openen by open_bdev_excl() 1347 + * close_bdev_exclusive - close a blockdevice opened by open_bdev_exclusive() 1334 1348 * 1335 1349 * @bdev: blockdevice to close 1350 + * @mode: mode, must match that used to open. 1336 1351 * 1337 - * This is the counterpart to open_bdev_excl(). 1352 + * This is the counterpart to open_bdev_exclusive(). 1338 1353 */ 1339 - void close_bdev_excl(struct block_device *bdev) 1354 + void close_bdev_exclusive(struct block_device *bdev, fmode_t mode) 1340 1355 { 1341 1356 bd_release(bdev); 1342 - blkdev_put(bdev); 1357 + blkdev_put(bdev, mode); 1343 1358 } 1344 1359 1345 - EXPORT_SYMBOL(close_bdev_excl); 1360 + EXPORT_SYMBOL(close_bdev_exclusive); 1346 1361 1347 1362 int __invalidate_device(struct block_device *bdev) 1348 1363 {
+1
fs/ext2/xip.c
··· 11 11 #include <linux/buffer_head.h> 12 12 #include <linux/ext2_fs_sb.h> 13 13 #include <linux/ext2_fs.h> 14 + #include <linux/blkdev.h> 14 15 #include "ext2.h" 15 16 #include "xip.h" 16 17
+2 -2
fs/ext3/super.c
··· 347 347 static int ext3_blkdev_put(struct block_device *bdev) 348 348 { 349 349 bd_release(bdev); 350 - return blkdev_put(bdev); 350 + return blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 351 351 } 352 352 353 353 static int ext3_blkdev_remove(struct ext3_sb_info *sbi) ··· 2067 2067 if (bd_claim(bdev, sb)) { 2068 2068 printk(KERN_ERR 2069 2069 "EXT3: failed to claim external journal device.\n"); 2070 - blkdev_put(bdev); 2070 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 2071 2071 return NULL; 2072 2072 } 2073 2073
+2 -2
fs/ext4/super.c
··· 399 399 static int ext4_blkdev_put(struct block_device *bdev) 400 400 { 401 401 bd_release(bdev); 402 - return blkdev_put(bdev); 402 + return blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 403 403 } 404 404 405 405 static int ext4_blkdev_remove(struct ext4_sb_info *sbi) ··· 2553 2553 if (bd_claim(bdev, sb)) { 2554 2554 printk(KERN_ERR 2555 2555 "EXT4: failed to claim external journal device.\n"); 2556 - blkdev_put(bdev); 2556 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 2557 2557 return NULL; 2558 2558 } 2559 2559
+3 -3
fs/fifo.c
··· 51 51 filp->f_mode &= (FMODE_READ | FMODE_WRITE); 52 52 53 53 switch (filp->f_mode) { 54 - case 1: 54 + case FMODE_READ: 55 55 /* 56 56 * O_RDONLY 57 57 * POSIX.1 says that O_NONBLOCK means return with the FIFO ··· 76 76 } 77 77 break; 78 78 79 - case 2: 79 + case FMODE_WRITE: 80 80 /* 81 81 * O_WRONLY 82 82 * POSIX.1 says that O_NONBLOCK means return -1 with ··· 98 98 } 99 99 break; 100 100 101 - case 3: 101 + case FMODE_READ | FMODE_WRITE: 102 102 /* 103 103 * O_RDWR 104 104 * POSIX.1 leaves this case "undefined" when O_NONBLOCK is set.
+2 -2
fs/file_table.c
··· 161 161 * code should be moved into this function. 162 162 */ 163 163 struct file *alloc_file(struct vfsmount *mnt, struct dentry *dentry, 164 - mode_t mode, const struct file_operations *fop) 164 + fmode_t mode, const struct file_operations *fop) 165 165 { 166 166 struct file *file; 167 167 struct path; ··· 193 193 * of this should be moving to alloc_file(). 194 194 */ 195 195 int init_file(struct file *file, struct vfsmount *mnt, struct dentry *dentry, 196 - mode_t mode, const struct file_operations *fop) 196 + fmode_t mode, const struct file_operations *fop) 197 197 { 198 198 int error = 0; 199 199 file->f_path.dentry = dentry;
+3 -2
fs/hostfs/hostfs_kern.c
··· 20 20 struct hostfs_inode_info { 21 21 char *host_filename; 22 22 int fd; 23 - int mode; 23 + fmode_t mode; 24 24 struct inode vfs_inode; 25 25 }; 26 26 ··· 373 373 int hostfs_file_open(struct inode *ino, struct file *file) 374 374 { 375 375 char *name; 376 - int mode = 0, r = 0, w = 0, fd; 376 + fmode_t mode = 0; 377 + int r = 0, w = 0, fd; 377 378 378 379 mode = file->f_mode & (FMODE_READ | FMODE_WRITE); 379 380 if ((mode & HOSTFS_I(ino)->mode) == mode)
+2 -2
fs/jfs/jfs_logmgr.c
··· 1168 1168 bd_release(bdev); 1169 1169 1170 1170 close: /* close external log device */ 1171 - blkdev_put(bdev); 1171 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 1172 1172 1173 1173 free: /* free log descriptor */ 1174 1174 mutex_unlock(&jfs_log_mutex); ··· 1514 1514 rc = lmLogShutdown(log); 1515 1515 1516 1516 bd_release(bdev); 1517 - blkdev_put(bdev); 1517 + blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 1518 1518 1519 1519 kfree(log); 1520 1520
+2 -1
fs/locks.c
··· 1580 1580 cmd &= ~LOCK_NB; 1581 1581 unlock = (cmd == LOCK_UN); 1582 1582 1583 - if (!unlock && !(cmd & LOCK_MAND) && !(filp->f_mode & 3)) 1583 + if (!unlock && !(cmd & LOCK_MAND) && 1584 + !(filp->f_mode & (FMODE_READ|FMODE_WRITE))) 1584 1585 goto out_putf; 1585 1586 1586 1587 error = flock_make_lock(filp, &lock, cmd);
+3 -3
fs/ocfs2/cluster/heartbeat.c
··· 976 976 } 977 977 978 978 if (reg->hr_bdev) 979 - blkdev_put(reg->hr_bdev); 979 + blkdev_put(reg->hr_bdev, FMODE_READ|FMODE_WRITE); 980 980 981 981 if (reg->hr_slots) 982 982 kfree(reg->hr_slots); ··· 1268 1268 goto out; 1269 1269 1270 1270 reg->hr_bdev = I_BDEV(filp->f_mapping->host); 1271 - ret = blkdev_get(reg->hr_bdev, FMODE_WRITE | FMODE_READ, 0); 1271 + ret = blkdev_get(reg->hr_bdev, FMODE_WRITE | FMODE_READ); 1272 1272 if (ret) { 1273 1273 reg->hr_bdev = NULL; 1274 1274 goto out; ··· 1358 1358 iput(inode); 1359 1359 if (ret < 0) { 1360 1360 if (reg->hr_bdev) { 1361 - blkdev_put(reg->hr_bdev); 1361 + blkdev_put(reg->hr_bdev, FMODE_READ|FMODE_WRITE); 1362 1362 reg->hr_bdev = NULL; 1363 1363 } 1364 1364 }
+1 -1
fs/open.c
··· 798 798 int error; 799 799 800 800 f->f_flags = flags; 801 - f->f_mode = ((flags+1) & O_ACCMODE) | FMODE_LSEEK | 801 + f->f_mode = (__force fmode_t)((flags+1) & O_ACCMODE) | FMODE_LSEEK | 802 802 FMODE_PREAD | FMODE_PWRITE; 803 803 inode = dentry->d_inode; 804 804 if (f->f_mode & FMODE_WRITE) {
+2 -2
fs/partitions/check.c
··· 485 485 goto exit; 486 486 487 487 bdev->bd_invalidated = 1; 488 - err = blkdev_get(bdev, FMODE_READ, 0); 488 + err = blkdev_get(bdev, FMODE_READ); 489 489 if (err < 0) 490 490 goto exit; 491 - blkdev_put(bdev); 491 + blkdev_put(bdev, FMODE_READ); 492 492 493 493 exit: 494 494 /* announce disk after possible partitions are created */
+2 -2
fs/proc/base.c
··· 1712 1712 file = fcheck_files(files, fd); 1713 1713 if (!file) 1714 1714 goto out_unlock; 1715 - if (file->f_mode & 1) 1715 + if (file->f_mode & FMODE_READ) 1716 1716 inode->i_mode |= S_IRUSR | S_IXUSR; 1717 - if (file->f_mode & 2) 1717 + if (file->f_mode & FMODE_WRITE) 1718 1718 inode->i_mode |= S_IWUSR | S_IXUSR; 1719 1719 spin_unlock(&files->file_lock); 1720 1720 put_files_struct(files);
+7 -4
fs/reiserfs/journal.c
··· 2575 2575 if (journal->j_dev_bd != NULL) { 2576 2576 if (journal->j_dev_bd->bd_dev != super->s_dev) 2577 2577 bd_release(journal->j_dev_bd); 2578 - result = blkdev_put(journal->j_dev_bd); 2578 + result = blkdev_put(journal->j_dev_bd, journal->j_dev_mode); 2579 2579 journal->j_dev_bd = NULL; 2580 2580 } 2581 2581 ··· 2593 2593 { 2594 2594 int result; 2595 2595 dev_t jdev; 2596 - int blkdev_mode = FMODE_READ | FMODE_WRITE; 2596 + fmode_t blkdev_mode = FMODE_READ | FMODE_WRITE; 2597 2597 char b[BDEVNAME_SIZE]; 2598 2598 2599 2599 result = 0; ··· 2608 2608 /* there is no "jdev" option and journal is on separate device */ 2609 2609 if ((!jdev_name || !jdev_name[0])) { 2610 2610 journal->j_dev_bd = open_by_devnum(jdev, blkdev_mode); 2611 + journal->j_dev_mode = blkdev_mode; 2611 2612 if (IS_ERR(journal->j_dev_bd)) { 2612 2613 result = PTR_ERR(journal->j_dev_bd); 2613 2614 journal->j_dev_bd = NULL; ··· 2619 2618 } else if (jdev != super->s_dev) { 2620 2619 result = bd_claim(journal->j_dev_bd, journal); 2621 2620 if (result) { 2622 - blkdev_put(journal->j_dev_bd); 2621 + blkdev_put(journal->j_dev_bd, blkdev_mode); 2623 2622 return result; 2624 2623 } 2625 2624 ··· 2629 2628 return 0; 2630 2629 } 2631 2630 2632 - journal->j_dev_bd = open_bdev_excl(jdev_name, 0, journal); 2631 + journal->j_dev_mode = blkdev_mode; 2632 + journal->j_dev_bd = open_bdev_exclusive(jdev_name, 2633 + blkdev_mode, journal); 2633 2634 if (IS_ERR(journal->j_dev_bd)) { 2634 2635 result = PTR_ERR(journal->j_dev_bd); 2635 2636 journal->j_dev_bd = NULL;
+10 -4
fs/super.c
··· 755 755 { 756 756 struct block_device *bdev; 757 757 struct super_block *s; 758 + fmode_t mode = FMODE_READ; 758 759 int error = 0; 759 760 760 - bdev = open_bdev_excl(dev_name, flags, fs_type); 761 + if (!(flags & MS_RDONLY)) 762 + mode |= FMODE_WRITE; 763 + 764 + bdev = open_bdev_exclusive(dev_name, mode, fs_type); 761 765 if (IS_ERR(bdev)) 762 766 return PTR_ERR(bdev); 763 767 ··· 784 780 goto error_bdev; 785 781 } 786 782 787 - close_bdev_excl(bdev); 783 + close_bdev_exclusive(bdev, mode); 788 784 } else { 789 785 char b[BDEVNAME_SIZE]; 790 786 791 787 s->s_flags = flags; 788 + s->s_mode = mode; 792 789 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); 793 790 sb_set_blocksize(s, block_size(bdev)); 794 791 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); ··· 807 802 error_s: 808 803 error = PTR_ERR(s); 809 804 error_bdev: 810 - close_bdev_excl(bdev); 805 + close_bdev_exclusive(bdev, mode); 811 806 error: 812 807 return error; 813 808 } ··· 817 812 void kill_block_super(struct super_block *sb) 818 813 { 819 814 struct block_device *bdev = sb->s_bdev; 815 + fmode_t mode = sb->s_mode; 820 816 821 817 generic_shutdown_super(sb); 822 818 sync_blockdev(bdev); 823 - close_bdev_excl(bdev); 819 + close_bdev_exclusive(bdev, mode); 824 820 } 825 821 826 822 EXPORT_SYMBOL(kill_block_super);
+2 -2
fs/xfs/linux-2.6/xfs_super.c
··· 589 589 { 590 590 int error = 0; 591 591 592 - *bdevp = open_bdev_excl(name, 0, mp); 592 + *bdevp = open_bdev_exclusive(name, FMODE_READ|FMODE_WRITE, mp); 593 593 if (IS_ERR(*bdevp)) { 594 594 error = PTR_ERR(*bdevp); 595 595 printk("XFS: Invalid device [%s], error=%d\n", name, error); ··· 603 603 struct block_device *bdev) 604 604 { 605 605 if (bdev) 606 - close_bdev_excl(bdev); 606 + close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE); 607 607 } 608 608 609 609 /*
+22 -5
include/linux/blkdev.h
··· 717 717 extern void blk_plug_device_unlocked(struct request_queue *); 718 718 extern int blk_remove_plug(struct request_queue *); 719 719 extern void blk_recount_segments(struct request_queue *, struct bio *); 720 - extern int scsi_cmd_ioctl(struct file *, struct request_queue *, 721 - struct gendisk *, unsigned int, void __user *); 722 - extern int sg_scsi_ioctl(struct file *, struct request_queue *, 723 - struct gendisk *, struct scsi_ioctl_command __user *); 720 + extern int scsi_cmd_ioctl(struct request_queue *, struct gendisk *, fmode_t, 721 + unsigned int, void __user *); 722 + extern int sg_scsi_ioctl(struct request_queue *, struct gendisk *, fmode_t, 723 + struct scsi_ioctl_command __user *); 724 724 725 725 /* 726 726 * Temporary export, until SCSI gets fixed up. ··· 910 910 * command filter functions 911 911 */ 912 912 extern int blk_verify_command(struct blk_cmd_filter *filter, 913 - unsigned char *cmd, int has_write_perm); 913 + unsigned char *cmd, fmode_t has_write_perm); 914 + extern void blk_unregister_filter(struct gendisk *disk); 914 915 extern void blk_set_cmd_filter_defaults(struct blk_cmd_filter *filter); 915 916 916 917 #define MAX_PHYS_SEGMENTS 128 ··· 1057 1056 1058 1057 #endif /* CONFIG_BLK_DEV_INTEGRITY */ 1059 1058 1059 + struct block_device_operations { 1060 + int (*open) (struct block_device *, fmode_t); 1061 + int (*release) (struct gendisk *, fmode_t); 1062 + int (*locked_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 1063 + int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 1064 + int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); 1065 + int (*direct_access) (struct block_device *, sector_t, 1066 + void **, unsigned long *); 1067 + int (*media_changed) (struct gendisk *); 1068 + int (*revalidate_disk) (struct gendisk *); 1069 + int (*getgeo)(struct block_device *, struct hd_geometry *); 1070 + struct module *owner; 1071 + }; 1072 + 1073 + extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int, 1074 + unsigned long); 1060 1075 #else /* CONFIG_BLOCK */ 1061 1076 /* 1062 1077 * stubs for when the block layer is configured out
+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);
+5 -6
include/linux/device-mapper.h
··· 69 69 70 70 typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv); 71 71 72 - typedef int (*dm_ioctl_fn) (struct dm_target *ti, struct inode *inode, 73 - struct file *filp, unsigned int cmd, 72 + typedef int (*dm_ioctl_fn) (struct dm_target *ti, unsigned int cmd, 74 73 unsigned long arg); 75 74 76 75 typedef int (*dm_merge_fn) (struct dm_target *ti, struct bvec_merge_data *bvm, ··· 84 85 85 86 struct dm_dev { 86 87 struct block_device *bdev; 87 - int mode; 88 + fmode_t mode; 88 89 char name[16]; 89 90 }; 90 91 ··· 94 95 * FIXME: too many arguments. 95 96 */ 96 97 int dm_get_device(struct dm_target *ti, const char *path, sector_t start, 97 - sector_t len, int mode, struct dm_dev **result); 98 + sector_t len, fmode_t mode, struct dm_dev **result); 98 99 void dm_put_device(struct dm_target *ti, struct dm_dev *d); 99 100 100 101 /* ··· 222 223 /* 223 224 * First create an empty table. 224 225 */ 225 - int dm_table_create(struct dm_table **result, int mode, 226 + int dm_table_create(struct dm_table **result, fmode_t mode, 226 227 unsigned num_targets, struct mapped_device *md); 227 228 228 229 /* ··· 253 254 */ 254 255 sector_t dm_table_get_size(struct dm_table *t); 255 256 unsigned int dm_table_get_num_targets(struct dm_table *t); 256 - int dm_table_get_mode(struct dm_table *t); 257 + fmode_t dm_table_get_mode(struct dm_table *t); 257 258 struct mapped_device *dm_table_get_md(struct dm_table *t); 258 259 259 260 /*
+2 -2
include/linux/file.h
··· 19 19 struct vfsmount; 20 20 struct dentry; 21 21 extern int init_file(struct file *, struct vfsmount *mnt, 22 - struct dentry *dentry, mode_t mode, 22 + struct dentry *dentry, fmode_t mode, 23 23 const struct file_operations *fop); 24 24 extern struct file *alloc_file(struct vfsmount *, struct dentry *dentry, 25 - mode_t mode, const struct file_operations *fop); 25 + fmode_t mode, const struct file_operations *fop); 26 26 27 27 static inline void fput_light(struct file *file, int fput_needed) 28 28 {
+20 -29
include/linux/fs.h
··· 63 63 #define MAY_ACCESS 16 64 64 #define MAY_OPEN 32 65 65 66 - #define FMODE_READ 1 67 - #define FMODE_WRITE 2 66 + #define FMODE_READ ((__force fmode_t)1) 67 + #define FMODE_WRITE ((__force fmode_t)2) 68 68 69 69 /* Internal kernel extensions */ 70 - #define FMODE_LSEEK 4 71 - #define FMODE_PREAD 8 70 + #define FMODE_LSEEK ((__force fmode_t)4) 71 + #define FMODE_PREAD ((__force fmode_t)8) 72 72 #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ 73 73 74 74 /* File is being opened for execution. Primary users of this flag are 75 75 distributed filesystems that can use it to achieve correct ETXTBUSY 76 76 behavior for cross-node execution/opening_for_writing of files */ 77 - #define FMODE_EXEC 16 77 + #define FMODE_EXEC ((__force fmode_t)16) 78 + 79 + #define FMODE_NDELAY ((__force fmode_t)32) 80 + #define FMODE_EXCL ((__force fmode_t)64) 81 + #define FMODE_WRITE_IOCTL ((__force fmode_t)128) 82 + #define FMODE_NDELAY_NOW ((__force fmode_t)256) 78 83 79 84 #define RW_MASK 1 80 85 #define RWA_MASK 2 ··· 830 825 const struct file_operations *f_op; 831 826 atomic_long_t f_count; 832 827 unsigned int f_flags; 833 - mode_t f_mode; 828 + fmode_t f_mode; 834 829 loff_t f_pos; 835 830 struct fown_struct f_owner; 836 831 unsigned int f_uid, f_gid; ··· 1157 1152 char s_id[32]; /* Informational name */ 1158 1153 1159 1154 void *s_fs_info; /* Filesystem private info */ 1155 + fmode_t s_mode; 1160 1156 1161 1157 /* 1162 1158 * The next field is for VFS *only*. No filesystems have any business ··· 1272 1266 * to have different dirent layouts depending on the binary type. 1273 1267 */ 1274 1268 typedef int (*filldir_t)(void *, const char *, int, loff_t, u64, unsigned); 1275 - 1276 - struct block_device_operations { 1277 - int (*open) (struct inode *, struct file *); 1278 - int (*release) (struct inode *, struct file *); 1279 - int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long); 1280 - long (*unlocked_ioctl) (struct file *, unsigned, unsigned long); 1281 - long (*compat_ioctl) (struct file *, unsigned, unsigned long); 1282 - int (*direct_access) (struct block_device *, sector_t, 1283 - void **, unsigned long *); 1284 - int (*media_changed) (struct gendisk *); 1285 - int (*revalidate_disk) (struct gendisk *); 1286 - int (*getgeo)(struct block_device *, struct hd_geometry *); 1287 - struct module *owner; 1288 - }; 1269 + struct block_device_operations; 1289 1270 1290 1271 /* These macros are for out of kernel modules to test that 1291 1272 * the kernel supports the unlocked_ioctl and compat_ioctl ··· 1706 1713 extern void bd_set_size(struct block_device *, loff_t size); 1707 1714 extern void bd_forget(struct inode *inode); 1708 1715 extern void bdput(struct block_device *); 1709 - extern struct block_device *open_by_devnum(dev_t, unsigned); 1716 + extern struct block_device *open_by_devnum(dev_t, fmode_t); 1710 1717 #else 1711 1718 static inline void bd_forget(struct inode *inode) {} 1712 1719 #endif ··· 1716 1723 extern const struct file_operations def_fifo_fops; 1717 1724 #ifdef CONFIG_BLOCK 1718 1725 extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long); 1719 - extern int blkdev_ioctl(struct inode *, struct file *, unsigned, unsigned long); 1720 - extern int blkdev_driver_ioctl(struct inode *inode, struct file *file, 1721 - struct gendisk *disk, unsigned cmd, 1722 - unsigned long arg); 1726 + extern int blkdev_ioctl(struct block_device *, fmode_t, unsigned, unsigned long); 1723 1727 extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long); 1724 - extern int blkdev_get(struct block_device *, mode_t, unsigned); 1725 - extern int blkdev_put(struct block_device *); 1728 + extern int blkdev_get(struct block_device *, fmode_t); 1729 + extern int blkdev_put(struct block_device *, fmode_t); 1726 1730 extern int bd_claim(struct block_device *, void *); 1727 1731 extern void bd_release(struct block_device *); 1728 1732 #ifdef CONFIG_SYSFS ··· 1750 1760 extern const char *__bdevname(dev_t, char *buffer); 1751 1761 extern const char *bdevname(struct block_device *bdev, char *buffer); 1752 1762 extern struct block_device *lookup_bdev(const char *); 1753 - extern struct block_device *open_bdev_excl(const char *, int, void *); 1754 - extern void close_bdev_excl(struct block_device *); 1763 + extern struct block_device *open_bdev_exclusive(const char *, fmode_t, void *); 1764 + extern void close_bdev_exclusive(struct block_device *, fmode_t); 1755 1765 extern void blkdev_show(struct seq_file *,off_t); 1766 + 1756 1767 #else 1757 1768 #define BLKDEV_MAJOR_HASH_SIZE 0 1758 1769 #endif
+1 -1
include/linux/fsnotify.h
··· 188 188 struct dentry *dentry = file->f_path.dentry; 189 189 struct inode *inode = dentry->d_inode; 190 190 const char *name = dentry->d_name.name; 191 - mode_t mode = file->f_mode; 191 + fmode_t mode = file->f_mode; 192 192 u32 mask = (mode & FMODE_WRITE) ? IN_CLOSE_WRITE : IN_CLOSE_NOWRITE; 193 193 194 194 if (S_ISDIR(inode->i_mode))
+3 -4
include/linux/ide.h
··· 474 474 ide_startstop_t (*do_request)(struct ide_drive_s *, struct request *, 475 475 sector_t); 476 476 int (*end_request)(struct ide_drive_s *, int, int); 477 - int (*ioctl)(struct ide_drive_s *, struct inode *, 478 - struct file *, unsigned int, unsigned long); 477 + int (*ioctl)(struct ide_drive_s *, struct block_device *, 478 + fmode_t, unsigned int, unsigned long); 479 479 }; 480 480 481 481 /* ATAPI device flags */ ··· 1158 1158 int ide_setting_ioctl(ide_drive_t *, struct block_device *, unsigned int, 1159 1159 unsigned long, const struct ide_ioctl_devset *); 1160 1160 1161 - int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, 1162 - unsigned, unsigned long); 1161 + int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned long); 1163 1162 1164 1163 extern int ide_vlb_clk; 1165 1164 extern int ide_pci_clk;
+1
include/linux/reiserfs_fs_sb.h
··· 178 178 struct reiserfs_journal_cnode *j_first; /* oldest journal block. start here for traverse */ 179 179 180 180 struct block_device *j_dev_bd; 181 + fmode_t j_dev_mode; 181 182 int j_1st_reserved_block; /* first block on s_dev of reserved area journal */ 182 183 183 184 unsigned long j_state;
+1
include/linux/types.h
··· 190 190 191 191 #ifdef __KERNEL__ 192 192 typedef unsigned __bitwise__ gfp_t; 193 + typedef unsigned __bitwise__ fmode_t; 193 194 194 195 #ifdef CONFIG_PHYS_ADDR_T_64BIT 195 196 typedef u64 phys_addr_t;
+1 -1
include/scsi/scsi_ioctl.h
··· 42 42 43 43 extern int scsi_ioctl(struct scsi_device *, int, void __user *); 44 44 extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd, 45 - void __user *arg, struct file *filp); 45 + void __user *arg, int ndelay); 46 46 47 47 #endif /* __KERNEL__ */ 48 48 #endif /* _SCSI_IOCTL_H */
+1 -1
ipc/shm.c
··· 817 817 struct ipc_namespace *ns; 818 818 struct shm_file_data *sfd; 819 819 struct path path; 820 - mode_t f_mode; 820 + fmode_t f_mode; 821 821 822 822 err = -EINVAL; 823 823 if (shmid < 0)
+1 -1
kernel/power/disk.c
··· 651 651 pr_debug("PM: Preparing processes for restore.\n"); 652 652 error = prepare_processes(); 653 653 if (error) { 654 - swsusp_close(); 654 + swsusp_close(FMODE_READ); 655 655 goto Done; 656 656 } 657 657
+1 -1
kernel/power/power.h
··· 153 153 extern void swsusp_free(void); 154 154 extern int swsusp_read(unsigned int *flags_p); 155 155 extern int swsusp_write(unsigned int flags); 156 - extern void swsusp_close(void); 156 + extern void swsusp_close(fmode_t); 157 157 158 158 struct timeval; 159 159 /* kernel/power/swsusp.c */
+7 -7
kernel/power/swap.c
··· 172 172 return res; 173 173 174 174 root_swap = res; 175 - res = blkdev_get(resume_bdev, FMODE_WRITE, O_RDWR); 175 + res = blkdev_get(resume_bdev, FMODE_WRITE); 176 176 if (res) 177 177 return res; 178 178 179 179 res = set_blocksize(resume_bdev, PAGE_SIZE); 180 180 if (res < 0) 181 - blkdev_put(resume_bdev); 181 + blkdev_put(resume_bdev, FMODE_WRITE); 182 182 183 183 return res; 184 184 } ··· 426 426 427 427 release_swap_writer(&handle); 428 428 out: 429 - swsusp_close(); 429 + swsusp_close(FMODE_WRITE); 430 430 return error; 431 431 } 432 432 ··· 574 574 error = load_image(&handle, &snapshot, header->pages - 1); 575 575 release_swap_reader(&handle); 576 576 577 - blkdev_put(resume_bdev); 577 + blkdev_put(resume_bdev, FMODE_READ); 578 578 579 579 if (!error) 580 580 pr_debug("PM: Image successfully loaded\n"); ··· 609 609 return -EINVAL; 610 610 } 611 611 if (error) 612 - blkdev_put(resume_bdev); 612 + blkdev_put(resume_bdev, FMODE_READ); 613 613 else 614 614 pr_debug("PM: Signature found, resuming\n"); 615 615 } else { ··· 626 626 * swsusp_close - close swap device. 627 627 */ 628 628 629 - void swsusp_close(void) 629 + void swsusp_close(fmode_t mode) 630 630 { 631 631 if (IS_ERR(resume_bdev)) { 632 632 pr_debug("PM: Image device not initialised\n"); 633 633 return; 634 634 } 635 635 636 - blkdev_put(resume_bdev); 636 + blkdev_put(resume_bdev, mode); /* move up */ 637 637 } 638 638 639 639 static int swsusp_header_init(void)
+1 -1
sound/core/oss/pcm_oss.c
··· 2283 2283 int idx, err; 2284 2284 struct snd_pcm_oss_file *pcm_oss_file; 2285 2285 struct snd_pcm_substream *substream; 2286 - unsigned int f_mode = file->f_mode; 2286 + fmode_t f_mode = file->f_mode; 2287 2287 2288 2288 if (rpcm_oss_file) 2289 2289 *rpcm_oss_file = NULL;
+1 -1
sound/oss/au1550_ac97.c
··· 93 93 spinlock_t lock; 94 94 struct mutex open_mutex; 95 95 struct mutex sem; 96 - mode_t open_mode; 96 + fmode_t open_mode; 97 97 wait_queue_head_t open_wait; 98 98 99 99 struct dmabuf {
+2 -2
sound/oss/dmasound/dmasound.h
··· 129 129 int (*mixer_ioctl)(u_int, u_long); /* optional */ 130 130 int (*write_sq_setup)(void); /* optional */ 131 131 int (*read_sq_setup)(void); /* optional */ 132 - int (*sq_open)(mode_t); /* optional */ 132 + int (*sq_open)(fmode_t); /* optional */ 133 133 int (*state_info)(char *, size_t); /* optional */ 134 134 void (*abort_read)(void); /* optional */ 135 135 int min_dsp_speed; ··· 235 235 */ 236 236 int active; 237 237 wait_queue_head_t action_queue, open_queue, sync_queue; 238 - int open_mode; 238 + fmode_t open_mode; 239 239 int busy, syncing, xruns, died; 240 240 }; 241 241
+2 -2
sound/oss/dmasound/dmasound_atari.c
··· 143 143 static int TTMixerIoctl(u_int cmd, u_long arg); 144 144 static int FalconMixerIoctl(u_int cmd, u_long arg); 145 145 static int AtaWriteSqSetup(void); 146 - static int AtaSqOpen(mode_t mode); 146 + static int AtaSqOpen(fmode_t mode); 147 147 static int TTStateInfo(char *buffer, size_t space); 148 148 static int FalconStateInfo(char *buffer, size_t space); 149 149 ··· 1461 1461 return 0 ; 1462 1462 } 1463 1463 1464 - static int AtaSqOpen(mode_t mode) 1464 + static int AtaSqOpen(fmode_t mode) 1465 1465 { 1466 1466 write_sq_ignore_int = 1; 1467 1467 return 0 ;
+5 -5
sound/oss/dmasound/dmasound_core.c
··· 212 212 #endif /* MODULE */ 213 213 214 214 /* control over who can modify resources shared between play/record */ 215 - static mode_t shared_resource_owner; 215 + static fmode_t shared_resource_owner; 216 216 static int shared_resources_initialised; 217 217 218 218 /* ··· 668 668 669 669 #if 0 /* blocking open() */ 670 670 static inline void sq_wake_up(struct sound_queue *sq, struct file *file, 671 - mode_t mode) 671 + fmode_t mode) 672 672 { 673 673 if (file->f_mode & mode) { 674 674 sq->busy = 0; /* CHECK: IS THIS OK??? */ ··· 677 677 } 678 678 #endif 679 679 680 - static int sq_open2(struct sound_queue *sq, struct file *file, mode_t mode, 680 + static int sq_open2(struct sound_queue *sq, struct file *file, fmode_t mode, 681 681 int numbufs, int bufsize) 682 682 { 683 683 int rc = 0; ··· 891 891 is the owner - if we have problems. 892 892 */ 893 893 894 - static int shared_resources_are_mine(mode_t md) 894 + static int shared_resources_are_mine(fmode_t md) 895 895 { 896 896 if (shared_resource_owner) 897 - return (shared_resource_owner & md ) ; 897 + return (shared_resource_owner & md) != 0; 898 898 else { 899 899 shared_resource_owner = md ; 900 900 return 1 ;
+1 -1
sound/oss/msnd.h
··· 211 211 212 212 /* State variables */ 213 213 enum { msndClassic, msndPinnacle } type; 214 - mode_t mode; 214 + fmode_t mode; 215 215 unsigned long flags; 216 216 #define F_RESETTING 0 217 217 #define F_HAVEDIGITAL 1
+6 -14
sound/oss/sound_config.h
··· 110 110 #define OPEN_WRITE PCM_ENABLE_OUTPUT 111 111 #define OPEN_READWRITE (OPEN_READ|OPEN_WRITE) 112 112 113 - #if OPEN_READ == FMODE_READ && OPEN_WRITE == FMODE_WRITE 114 - 115 113 static inline int translate_mode(struct file *file) 116 114 { 117 - return file->f_mode; 115 + if (OPEN_READ == (__force int)FMODE_READ && 116 + OPEN_WRITE == (__force int)FMODE_WRITE) 117 + return (__force int)(file->f_mode & (FMODE_READ | FMODE_WRITE)); 118 + else 119 + return ((file->f_mode & FMODE_READ) ? OPEN_READ : 0) | 120 + ((file->f_mode & FMODE_WRITE) ? OPEN_WRITE : 0); 118 121 } 119 - 120 - #else 121 - 122 - static inline int translate_mode(struct file *file) 123 - { 124 - return ((file->f_mode & FMODE_READ) ? OPEN_READ : 0) | 125 - ((file->f_mode & FMODE_WRITE) ? OPEN_WRITE : 0); 126 - } 127 - 128 - #endif 129 - 130 122 131 123 #include "sound_calls.h" 132 124 #include "dev_table.h"
+1 -1
sound/oss/swarm_cs4297a.c
··· 295 295 struct mutex open_mutex; 296 296 struct mutex open_sem_adc; 297 297 struct mutex open_sem_dac; 298 - mode_t open_mode; 298 + fmode_t open_mode; 299 299 wait_queue_head_t open_wait; 300 300 wait_queue_head_t open_wait_adc; 301 301 wait_queue_head_t open_wait_dac;
+1 -1
sound/oss/vwsnd.c
··· 1509 1509 struct mutex open_mutex; 1510 1510 struct mutex io_mutex; 1511 1511 struct mutex mix_mutex; 1512 - mode_t open_mode; 1512 + fmode_t open_mode; 1513 1513 wait_queue_head_t open_wait; 1514 1514 1515 1515 lithium_t lith;