diff options
Diffstat (limited to 'drivers/ide/ide-disk_ioctl.c')
-rw-r--r-- | drivers/ide/ide-disk_ioctl.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/ide/ide-disk_ioctl.c b/drivers/ide/ide-disk_ioctl.c index ec94c66918f6..da36f729ff32 100644 --- a/drivers/ide/ide-disk_ioctl.c +++ b/drivers/ide/ide-disk_ioctl.c | |||
@@ -1,10 +1,11 @@ | |||
1 | #include <linux/kernel.h> | 1 | #include <linux/kernel.h> |
2 | #include <linux/ide.h> | 2 | #include <linux/ide.h> |
3 | #include <linux/hdreg.h> | 3 | #include <linux/hdreg.h> |
4 | #include <linux/smp_lock.h> | 4 | #include <linux/mutex.h> |
5 | 5 | ||
6 | #include "ide-disk.h" | 6 | #include "ide-disk.h" |
7 | 7 | ||
8 | static DEFINE_MUTEX(ide_disk_ioctl_mutex); | ||
8 | static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = { | 9 | static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = { |
9 | { HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, &ide_devset_address }, | 10 | { HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, &ide_devset_address }, |
10 | { HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, &ide_devset_multcount }, | 11 | { HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, &ide_devset_multcount }, |
@@ -19,13 +20,13 @@ int ide_disk_ioctl(ide_drive_t *drive, struct block_device *bdev, fmode_t mode, | |||
19 | { | 20 | { |
20 | int err; | 21 | int err; |
21 | 22 | ||
22 | lock_kernel(); | 23 | mutex_lock(&ide_disk_ioctl_mutex); |
23 | err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings); | 24 | err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings); |
24 | if (err != -EOPNOTSUPP) | 25 | if (err != -EOPNOTSUPP) |
25 | goto out; | 26 | goto out; |
26 | 27 | ||
27 | err = generic_ide_ioctl(drive, bdev, cmd, arg); | 28 | err = generic_ide_ioctl(drive, bdev, cmd, arg); |
28 | out: | 29 | out: |
29 | unlock_kernel(); | 30 | mutex_unlock(&ide_disk_ioctl_mutex); |
30 | return err; | 31 | return err; |
31 | } | 32 | } |