[CONNECTOR]: Cleanup struct cn_queue_dev
[sfrench/cifs-2.6.git] / drivers / connector / cn_queue.c
index b418b16e910e9b92f155207a87b49e8f7b1d7f3b..dbda08c7b3db43fc289c2f79dd8664d782f8d6c3 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;
        }
 
@@ -147,7 +146,6 @@ struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *nls)
        spin_lock_init(&dev->queue_lock);
 
        dev->nls = nls;
-       dev->netlink_groups = 0;
 
        dev->cn_queue = create_workqueue(dev->name);
        if (!dev->cn_queue) {