diff options
Diffstat (limited to 'drivers/block/xsysace.c')
-rw-r--r-- | drivers/block/xsysace.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c index 057413bb16e2..6e968cd4893c 100644 --- a/drivers/block/xsysace.c +++ b/drivers/block/xsysace.c | |||
@@ -89,7 +89,7 @@ | |||
89 | #include <linux/delay.h> | 89 | #include <linux/delay.h> |
90 | #include <linux/slab.h> | 90 | #include <linux/slab.h> |
91 | #include <linux/blkdev.h> | 91 | #include <linux/blkdev.h> |
92 | #include <linux/smp_lock.h> | 92 | #include <linux/mutex.h> |
93 | #include <linux/ata.h> | 93 | #include <linux/ata.h> |
94 | #include <linux/hdreg.h> | 94 | #include <linux/hdreg.h> |
95 | #include <linux/platform_device.h> | 95 | #include <linux/platform_device.h> |
@@ -214,6 +214,7 @@ struct ace_device { | |||
214 | u16 cf_id[ATA_ID_WORDS]; | 214 | u16 cf_id[ATA_ID_WORDS]; |
215 | }; | 215 | }; |
216 | 216 | ||
217 | static DEFINE_MUTEX(xsysace_mutex); | ||
217 | static int ace_major; | 218 | static int ace_major; |
218 | 219 | ||
219 | /* --------------------------------------------------------------------- | 220 | /* --------------------------------------------------------------------- |
@@ -903,13 +904,13 @@ static int ace_open(struct block_device *bdev, fmode_t mode) | |||
903 | 904 | ||
904 | dev_dbg(ace->dev, "ace_open() users=%i\n", ace->users + 1); | 905 | dev_dbg(ace->dev, "ace_open() users=%i\n", ace->users + 1); |
905 | 906 | ||
906 | lock_kernel(); | 907 | mutex_lock(&xsysace_mutex); |
907 | spin_lock_irqsave(&ace->lock, flags); | 908 | spin_lock_irqsave(&ace->lock, flags); |
908 | ace->users++; | 909 | ace->users++; |
909 | spin_unlock_irqrestore(&ace->lock, flags); | 910 | spin_unlock_irqrestore(&ace->lock, flags); |
910 | 911 | ||
911 | check_disk_change(bdev); | 912 | check_disk_change(bdev); |
912 | unlock_kernel(); | 913 | mutex_unlock(&xsysace_mutex); |
913 | 914 | ||
914 | return 0; | 915 | return 0; |
915 | } | 916 | } |
@@ -922,7 +923,7 @@ static int ace_release(struct gendisk *disk, fmode_t mode) | |||
922 | 923 | ||
923 | dev_dbg(ace->dev, "ace_release() users=%i\n", ace->users - 1); | 924 | dev_dbg(ace->dev, "ace_release() users=%i\n", ace->users - 1); |
924 | 925 | ||
925 | lock_kernel(); | 926 | mutex_lock(&xsysace_mutex); |
926 | spin_lock_irqsave(&ace->lock, flags); | 927 | spin_lock_irqsave(&ace->lock, flags); |
927 | ace->users--; | 928 | ace->users--; |
928 | if (ace->users == 0) { | 929 | if (ace->users == 0) { |
@@ -930,7 +931,7 @@ static int ace_release(struct gendisk *disk, fmode_t mode) | |||
930 | ace_out(ace, ACE_CTRL, val & ~ACE_CTRL_LOCKREQ); | 931 | ace_out(ace, ACE_CTRL, val & ~ACE_CTRL_LOCKREQ); |
931 | } | 932 | } |
932 | spin_unlock_irqrestore(&ace->lock, flags); | 933 | spin_unlock_irqrestore(&ace->lock, flags); |
933 | unlock_kernel(); | 934 | mutex_unlock(&xsysace_mutex); |
934 | return 0; | 935 | return 0; |
935 | } | 936 | } |
936 | 937 | ||