Fixup ioctls
[binject.git] / main.c
diff --git a/main.c b/main.c
index 7261999e44af59b42c6651c3da1e729dc0b549a7..296cbfe1aac8dc61a535545f41d3acd39d054901 100644 (file)
--- a/main.c
+++ b/main.c
@@ -326,7 +326,9 @@ static void b_cmd_endio(struct bio *bio, int error)
 
        atomic_dec(&bd->in_flight);
 
-       wake_up(&bd->wq_done);
+       smp_mb();
+       if (waitqueue_active(&bd->wq_done))
+               wake_up(&bd->wq_done);
 }
 
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
@@ -734,21 +736,21 @@ static long b_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                return -EFAULT;
 
        switch (cmd) {
-       case 0:
+       case B_IOCTL_ADD:
                ret = b_add_dev(&bic);
                if (!ret && copy_to_user(uarg, &bic, sizeof(bic))) {
                        b_del_dev(&bic);
                        ret = -EFAULT;
                }
                break;
-       case 1:
+       case B_IOCTL_DEL:
                ret =  b_del_dev(&bic);
                break;
        default:
                break;
        }
 
-       return -ENOTTY;
+       return ret;
 }
 
 static const struct file_operations b_misc_fops = {