diff options
Diffstat (limited to 'drivers/block/paride/pcd.c')
-rw-r--r-- | drivers/block/paride/pcd.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index 71acf4e53356..daba7a62a663 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c | |||
@@ -138,6 +138,7 @@ enum {D_PRT, D_PRO, D_UNI, D_MOD, D_SLV, D_DLY}; | |||
138 | #include <linux/cdrom.h> | 138 | #include <linux/cdrom.h> |
139 | #include <linux/spinlock.h> | 139 | #include <linux/spinlock.h> |
140 | #include <linux/blkdev.h> | 140 | #include <linux/blkdev.h> |
141 | #include <linux/smp_lock.h> | ||
141 | #include <asm/uaccess.h> | 142 | #include <asm/uaccess.h> |
142 | 143 | ||
143 | static DEFINE_SPINLOCK(pcd_lock); | 144 | static DEFINE_SPINLOCK(pcd_lock); |
@@ -238,7 +239,13 @@ static int pcd_block_ioctl(struct block_device *bdev, fmode_t mode, | |||
238 | unsigned cmd, unsigned long arg) | 239 | unsigned cmd, unsigned long arg) |
239 | { | 240 | { |
240 | struct pcd_unit *cd = bdev->bd_disk->private_data; | 241 | struct pcd_unit *cd = bdev->bd_disk->private_data; |
241 | return cdrom_ioctl(&cd->info, bdev, mode, cmd, arg); | 242 | int ret; |
243 | |||
244 | lock_kernel(); | ||
245 | ret = cdrom_ioctl(&cd->info, bdev, mode, cmd, arg); | ||
246 | unlock_kernel(); | ||
247 | |||
248 | return ret; | ||
242 | } | 249 | } |
243 | 250 | ||
244 | static int pcd_block_media_changed(struct gendisk *disk) | 251 | static int pcd_block_media_changed(struct gendisk *disk) |
@@ -251,7 +258,7 @@ static const struct block_device_operations pcd_bdops = { | |||
251 | .owner = THIS_MODULE, | 258 | .owner = THIS_MODULE, |
252 | .open = pcd_block_open, | 259 | .open = pcd_block_open, |
253 | .release = pcd_block_release, | 260 | .release = pcd_block_release, |
254 | .locked_ioctl = pcd_block_ioctl, | 261 | .ioctl = pcd_block_ioctl, |
255 | .media_changed = pcd_block_media_changed, | 262 | .media_changed = pcd_block_media_changed, |
256 | }; | 263 | }; |
257 | 264 | ||