]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/s390/net/qeth_core_main.c
s390/qeth: defer IPv6 address notifier events
[linux.git] / drivers / s390 / net / qeth_core_main.c
index 197b0f5b63e7183473b91a0d8d8f728bb3e0c16e..5ad0942f77ae6509b758b3d6cb17f2ceef4173ac 100644 (file)
@@ -1150,13 +1150,16 @@ static void qeth_notify_skbs(struct qeth_qdio_out_q *q,
 
 static void qeth_release_skbs(struct qeth_qdio_out_buffer *buf)
 {
+       struct sk_buff *skb;
+
        /* release may never happen from within CQ tasklet scope */
        WARN_ON_ONCE(atomic_read(&buf->state) == QETH_QDIO_BUF_IN_CQ);
 
        if (atomic_read(&buf->state) == QETH_QDIO_BUF_PENDING)
                qeth_notify_skbs(buf->q, buf, TX_NOTIFY_GENERALERROR);
 
-       __skb_queue_purge(&buf->skb_list);
+       while ((skb = __skb_dequeue(&buf->skb_list)) != NULL)
+               consume_skb(skb);
 }
 
 static void qeth_clear_output_buffer(struct qeth_qdio_out_q *queue,
@@ -1406,7 +1409,6 @@ static void qeth_setup_card(struct qeth_card *card)
 
        card->info.type = CARD_RDEV(card)->id.driver_info;
        card->state = CARD_STATE_DOWN;
-       spin_lock_init(&card->mclock);
        spin_lock_init(&card->lock);
        spin_lock_init(&card->ip_lock);
        spin_lock_init(&card->thread_mask_lock);
@@ -1448,7 +1450,8 @@ static struct qeth_card *qeth_alloc_card(struct ccwgroup_device *gdev)
        CARD_WDEV(card) = gdev->cdev[1];
        CARD_DDEV(card) = gdev->cdev[2];
 
-       card->event_wq = alloc_ordered_workqueue("%s", 0, dev_name(&gdev->dev));
+       card->event_wq = alloc_ordered_workqueue("%s_event", 0,
+                                                dev_name(&gdev->dev));
        if (!card->event_wq)
                goto out_wq;
        if (qeth_setup_channel(&card->read, true))