Commit f80a0ca6ad8f2800453e819dafa09a0ed9e56850
Committed by
Linus Torvalds
1 parent
a36fed12a4
Exists in
master
and in
39 other branches
pktcdvd: improve BKL and compat_ioctl.c usage
The pktcdvd driver uses proper locking and does not need the BKL in the ioctl and llseek functions of the character device, so kill both. Moving the compat_ioctl handling from common code into the driver itself fixes build problems when CONFIG_BLOCK is disabled. Acked-by: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 14 additions and 6 deletions Side-by-side Diff
drivers/block/pktcdvd.c
... | ... | @@ -48,6 +48,7 @@ |
48 | 48 | #include <linux/module.h> |
49 | 49 | #include <linux/types.h> |
50 | 50 | #include <linux/kernel.h> |
51 | +#include <linux/compat.h> | |
51 | 52 | #include <linux/kthread.h> |
52 | 53 | #include <linux/errno.h> |
53 | 54 | #include <linux/spinlock.h> |
... | ... | @@ -2984,7 +2985,7 @@ |
2984 | 2985 | mutex_unlock(&ctl_mutex); |
2985 | 2986 | } |
2986 | 2987 | |
2987 | -static int pkt_ctl_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) | |
2988 | +static long pkt_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |
2988 | 2989 | { |
2989 | 2990 | void __user *argp = (void __user *)arg; |
2990 | 2991 | struct pkt_ctrl_command ctrl_cmd; |
2991 | 2992 | |
... | ... | @@ -3021,10 +3022,20 @@ |
3021 | 3022 | return ret; |
3022 | 3023 | } |
3023 | 3024 | |
3025 | +#ifdef CONFIG_COMPAT | |
3026 | +static long pkt_ctl_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |
3027 | +{ | |
3028 | + return pkt_ctl_ioctl(file, cmd, (unsigned long)compat_ptr(arg)); | |
3029 | +} | |
3030 | +#endif | |
3024 | 3031 | |
3025 | 3032 | static const struct file_operations pkt_ctl_fops = { |
3026 | - .ioctl = pkt_ctl_ioctl, | |
3027 | - .owner = THIS_MODULE, | |
3033 | + .open = nonseekable_open, | |
3034 | + .unlocked_ioctl = pkt_ctl_ioctl, | |
3035 | +#ifdef CONFIG_COMPAT | |
3036 | + .compat_ioctl = pkt_ctl_compat_ioctl, | |
3037 | +#endif | |
3038 | + .owner = THIS_MODULE, | |
3028 | 3039 | }; |
3029 | 3040 | |
3030 | 3041 | static struct miscdevice pkt_misc = { |
fs/compat_ioctl.c
... | ... | @@ -102,7 +102,6 @@ |
102 | 102 | #include <linux/nbd.h> |
103 | 103 | #include <linux/random.h> |
104 | 104 | #include <linux/filter.h> |
105 | -#include <linux/pktcdvd.h> | |
106 | 105 | |
107 | 106 | #include <linux/hiddev.h> |
108 | 107 | |
... | ... | @@ -1126,8 +1125,6 @@ |
1126 | 1125 | COMPATIBLE_IOCTL(PPGETPHASE) |
1127 | 1126 | COMPATIBLE_IOCTL(PPGETFLAGS) |
1128 | 1127 | COMPATIBLE_IOCTL(PPSETFLAGS) |
1129 | -/* pktcdvd */ | |
1130 | -COMPATIBLE_IOCTL(PACKET_CTRL_CMD) | |
1131 | 1128 | /* Big A */ |
1132 | 1129 | /* sparc only */ |
1133 | 1130 | /* Big Q for sound/OSS */ |