diff options
Diffstat (limited to 'drivers/block')
-rw-r--r-- | drivers/block/aoe/aoechr.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/block/aoe/aoechr.c b/drivers/block/aoe/aoechr.c index c04440cd6a32..181ebb85f0be 100644 --- a/drivers/block/aoe/aoechr.c +++ b/drivers/block/aoe/aoechr.c | |||
@@ -6,6 +6,7 @@ | |||
6 | 6 | ||
7 | #include <linux/hdreg.h> | 7 | #include <linux/hdreg.h> |
8 | #include <linux/blkdev.h> | 8 | #include <linux/blkdev.h> |
9 | #include <linux/completion.h> | ||
9 | #include <linux/delay.h> | 10 | #include <linux/delay.h> |
10 | #include <linux/smp_lock.h> | 11 | #include <linux/smp_lock.h> |
11 | #include "aoe.h" | 12 | #include "aoe.h" |
@@ -36,7 +37,7 @@ struct ErrMsg { | |||
36 | 37 | ||
37 | static struct ErrMsg emsgs[NMSG]; | 38 | static struct ErrMsg emsgs[NMSG]; |
38 | static int emsgs_head_idx, emsgs_tail_idx; | 39 | static int emsgs_head_idx, emsgs_tail_idx; |
39 | static struct semaphore emsgs_sema; | 40 | static struct completion emsgs_comp; |
40 | static spinlock_t emsgs_lock; | 41 | static spinlock_t emsgs_lock; |
41 | static int nblocked_emsgs_readers; | 42 | static int nblocked_emsgs_readers; |
42 | static struct class *aoe_class; | 43 | static struct class *aoe_class; |
@@ -141,7 +142,7 @@ bail: spin_unlock_irqrestore(&emsgs_lock, flags); | |||
141 | spin_unlock_irqrestore(&emsgs_lock, flags); | 142 | spin_unlock_irqrestore(&emsgs_lock, flags); |
142 | 143 | ||
143 | if (nblocked_emsgs_readers) | 144 | if (nblocked_emsgs_readers) |
144 | up(&emsgs_sema); | 145 | complete(&emsgs_comp); |
145 | } | 146 | } |
146 | 147 | ||
147 | static ssize_t | 148 | static ssize_t |
@@ -221,7 +222,7 @@ aoechr_read(struct file *filp, char __user *buf, size_t cnt, loff_t *off) | |||
221 | 222 | ||
222 | spin_unlock_irqrestore(&emsgs_lock, flags); | 223 | spin_unlock_irqrestore(&emsgs_lock, flags); |
223 | 224 | ||
224 | n = down_interruptible(&emsgs_sema); | 225 | n = wait_for_completion_interruptible(&emsgs_comp); |
225 | 226 | ||
226 | spin_lock_irqsave(&emsgs_lock, flags); | 227 | spin_lock_irqsave(&emsgs_lock, flags); |
227 | 228 | ||
@@ -269,7 +270,7 @@ aoechr_init(void) | |||
269 | printk(KERN_ERR "aoe: can't register char device\n"); | 270 | printk(KERN_ERR "aoe: can't register char device\n"); |
270 | return n; | 271 | return n; |
271 | } | 272 | } |
272 | sema_init(&emsgs_sema, 0); | 273 | init_completion(&emsgs_comp); |
273 | spin_lock_init(&emsgs_lock); | 274 | spin_lock_init(&emsgs_lock); |
274 | aoe_class = class_create(THIS_MODULE, "aoe"); | 275 | aoe_class = class_create(THIS_MODULE, "aoe"); |
275 | if (IS_ERR(aoe_class)) { | 276 | if (IS_ERR(aoe_class)) { |