]> Pileus Git - ~andy/linux/blobdiff - drivers/connector/cn_queue.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[~andy/linux] / drivers / connector / cn_queue.c
index b418b16e910e9b92f155207a87b49e8f7b1d7f3b..12ceed54ab18001f89b2e587106fa8fa7b20de82 100644 (file)
@@ -34,7 +34,7 @@
 void cn_queue_wrapper(struct work_struct *work)
 {
        struct cn_callback_entry *cbq =
-               container_of(work, struct cn_callback_entry, work.work);
+               container_of(work, struct cn_callback_entry, work);
        struct cn_callback_data *d = &cbq->data;
 
        d->callback(d->callback_priv);
@@ -59,13 +59,12 @@ static struct cn_callback_entry *cn_queue_alloc_callback_entry(char *name, struc
        memcpy(&cbq->id.id, id, sizeof(struct cb_id));
        cbq->data.callback = callback;
        
-       INIT_DELAYED_WORK(&cbq->work, &cn_queue_wrapper);
+       INIT_WORK(&cbq->work, &cn_queue_wrapper);
        return cbq;
 }
 
 static void cn_queue_free_callback(struct cn_callback_entry *cbq)
 {
-       cancel_delayed_work(&cbq->work);
        flush_workqueue(cbq->pdev->cn_queue);
 
        kfree(cbq);
@@ -100,8 +99,8 @@ int cn_queue_add_callback(struct cn_queue_dev *dev, char *name, struct cb_id *id
        spin_unlock_bh(&dev->queue_lock);
 
        if (found) {
-               atomic_dec(&dev->refcnt);
                cn_queue_free_callback(cbq);
+               atomic_dec(&dev->refcnt);
                return -EINVAL;
        }