kernel - add missing M_ZERO in taskqueue_create()
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 30 Sep 2009 18:38:53 +0000 (11:38 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 30 Sep 2009 18:38:53 +0000 (11:38 -0700)
* taskqueue_create() was not ensuring a zero'd task queue structure,
  resulting in a situation where the flags and other fields could end
  up as garbage and prevent the taskqueue from being signaled on enqueue.

* This bug was responsible for situations where CAM fails to complete
  its configuration, generating warnings for 60 seconds and then giving
  up.

sys/kern/subr_taskqueue.c

index 0cff2cc..9b9abb1 100644 (file)
@@ -102,7 +102,7 @@ taskqueue_create(const char *name, int mflags,
 {
        struct taskqueue *queue;
 
-       queue = kmalloc(sizeof(struct taskqueue), M_TASKQUEUE, mflags);
+       queue = kmalloc(sizeof(*queue), M_TASKQUEUE, mflags | M_ZERO);
        if (!queue)
                return NULL;
        STAILQ_INIT(&queue->tq_queue);