Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/bdev:
[PATCH] fix bogus argument of blkdev_put() in pktcdvd
[PATCH 2/2] documnt FMODE_ constants
[PATCH 1/2] kill FMODE_NDELAY_NOW
[PATCH] clean up blkdev_get a little bit
[PATCH] Fix block dev compat ioctl handling
[PATCH] kill obsolete temporary comment in swsusp_close()

+68 -27
+30 -1
block/compat_ioctl.c
··· 677 677 case DVD_WRITE_STRUCT: 678 678 case DVD_AUTH: 679 679 arg = (unsigned long)compat_ptr(arg); 680 + /* These intepret arg as an unsigned long, not as a pointer, 681 + * so we must not do compat_ptr() conversion. */ 682 + case HDIO_SET_MULTCOUNT: 683 + case HDIO_SET_UNMASKINTR: 684 + case HDIO_SET_KEEPSETTINGS: 685 + case HDIO_SET_32BIT: 686 + case HDIO_SET_NOWERR: 687 + case HDIO_SET_DMA: 688 + case HDIO_SET_PIO_MODE: 689 + case HDIO_SET_NICE: 690 + case HDIO_SET_WCACHE: 691 + case HDIO_SET_ACOUSTIC: 692 + case HDIO_SET_BUSSTATE: 693 + case HDIO_SET_ADDRESS: 694 + case CDROMEJECT_SW: 695 + case CDROM_SET_OPTIONS: 696 + case CDROM_CLEAR_OPTIONS: 697 + case CDROM_SELECT_SPEED: 698 + case CDROM_SELECT_DISC: 699 + case CDROM_MEDIA_CHANGED: 700 + case CDROM_DRIVE_STATUS: 701 + case CDROM_LOCKDOOR: 702 + case CDROM_DEBUG: 680 703 break; 681 704 default: 682 705 /* unknown ioctl number */ ··· 722 699 struct backing_dev_info *bdi; 723 700 loff_t size; 724 701 702 + /* 703 + * O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have 704 + * to updated it before every ioctl. 705 + */ 725 706 if (file->f_flags & O_NDELAY) 726 - mode |= FMODE_NDELAY_NOW; 707 + mode |= FMODE_NDELAY; 708 + else 709 + mode &= ~FMODE_NDELAY; 727 710 728 711 switch (cmd) { 729 712 case HDIO_GETGEO:
+2 -2
drivers/block/pktcdvd.c
··· 2790 2790 return 0; 2791 2791 2792 2792 out_mem: 2793 - blkdev_put(bdev, FMODE_READ|FMODE_WRITE); 2793 + blkdev_put(bdev, FMODE_READ | FMODE_NDELAY); 2794 2794 /* This is safe: open() is still holding a reference. */ 2795 2795 module_put(THIS_MODULE); 2796 2796 return ret; ··· 2975 2975 pkt_debugfs_dev_remove(pd); 2976 2976 pkt_sysfs_dev_remove(pd); 2977 2977 2978 - blkdev_put(pd->bdev, FMODE_READ|FMODE_WRITE); 2978 + blkdev_put(pd->bdev, FMODE_READ | FMODE_NDELAY); 2979 2979 2980 2980 remove_proc_entry(pd->name, pkt_proc); 2981 2981 DPRINTK(DRIVER_NAME": writer %s unmapped\n", pd->name);
+1 -1
drivers/scsi/sd.c
··· 757 757 * access to the device is prohibited. 758 758 */ 759 759 error = scsi_nonblockable_ioctl(sdp, cmd, p, 760 - (mode & FMODE_NDELAY_NOW) != 0); 760 + (mode & FMODE_NDELAY) != 0); 761 761 if (!scsi_block_when_processing_errors(sdp) || !error) 762 762 return error; 763 763
+1 -1
drivers/scsi/sr.c
··· 521 521 * if it doesn't recognise the ioctl 522 522 */ 523 523 ret = scsi_nonblockable_ioctl(sdev, cmd, argp, 524 - (mode & FMODE_NDELAY_NOW) != 0); 524 + (mode & FMODE_NDELAY) != 0); 525 525 if (ret != -ENODEV) 526 526 return ret; 527 527 return scsi_ioctl(sdev, cmd, argp);
+16 -5
fs/block_dev.c
··· 1135 1135 if (res) 1136 1136 return res; 1137 1137 1138 - if (!(filp->f_mode & FMODE_EXCL)) 1139 - return 0; 1138 + if (filp->f_mode & FMODE_EXCL) { 1139 + res = bd_claim(bdev, filp); 1140 + if (res) 1141 + goto out_blkdev_put; 1142 + } 1140 1143 1141 - if (!(res = bd_claim(bdev, filp))) 1142 - return 0; 1144 + return 0; 1143 1145 1146 + out_blkdev_put: 1144 1147 blkdev_put(bdev, filp->f_mode); 1145 1148 return res; 1146 1149 } ··· 1206 1203 { 1207 1204 struct block_device *bdev = I_BDEV(file->f_mapping->host); 1208 1205 fmode_t mode = file->f_mode; 1206 + 1207 + /* 1208 + * O_NDELAY can be altered using fcntl(.., F_SETFL, ..), so we have 1209 + * to updated it before every ioctl. 1210 + */ 1209 1211 if (file->f_flags & O_NDELAY) 1210 - mode |= FMODE_NDELAY_NOW; 1212 + mode |= FMODE_NDELAY; 1213 + else 1214 + mode &= ~FMODE_NDELAY; 1215 + 1211 1216 return blkdev_ioctl(bdev, mode, cmd, arg); 1212 1217 } 1213 1218
+17 -16
include/linux/fs.h
··· 63 63 #define MAY_ACCESS 16 64 64 #define MAY_OPEN 32 65 65 66 - #define FMODE_READ ((__force fmode_t)1) 67 - #define FMODE_WRITE ((__force fmode_t)2) 68 - 69 - /* Internal kernel extensions */ 70 - #define FMODE_LSEEK ((__force fmode_t)4) 71 - #define FMODE_PREAD ((__force fmode_t)8) 72 - #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ 73 - 74 - /* File is being opened for execution. Primary users of this flag are 75 - distributed filesystems that can use it to achieve correct ETXTBUSY 76 - behavior for cross-node execution/opening_for_writing of files */ 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) 66 + /* file is open for reading */ 67 + #define FMODE_READ ((__force fmode_t)1) 68 + /* file is open for writing */ 69 + #define FMODE_WRITE ((__force fmode_t)2) 70 + /* file is seekable */ 71 + #define FMODE_LSEEK ((__force fmode_t)4) 72 + /* file can be accessed using pread/pwrite */ 73 + #define FMODE_PREAD ((__force fmode_t)8) 74 + #define FMODE_PWRITE FMODE_PREAD /* These go hand in hand */ 75 + /* File is opened for execution with sys_execve / sys_uselib */ 76 + #define FMODE_EXEC ((__force fmode_t)16) 77 + /* File is opened with O_NDELAY (only set for block devices) */ 78 + #define FMODE_NDELAY ((__force fmode_t)32) 79 + /* File is opened with O_EXCL (only set for block devices) */ 80 + #define FMODE_EXCL ((__force fmode_t)64) 81 + /* File is opened using open(.., 3, ..) and is writeable only for ioctls 82 + (specialy hack for floppy.c) */ 81 83 #define FMODE_WRITE_IOCTL ((__force fmode_t)128) 82 - #define FMODE_NDELAY_NOW ((__force fmode_t)256) 83 84 84 85 #define RW_MASK 1 85 86 #define RWA_MASK 2
+1 -1
kernel/power/swap.c
··· 633 633 return; 634 634 } 635 635 636 - blkdev_put(resume_bdev, mode); /* move up */ 636 + blkdev_put(resume_bdev, mode); 637 637 } 638 638 639 639 static int swsusp_header_init(void)