diff
+ static int qeth_realloc_output_queues(struct qeth_card *card, unsigned int new_count) {
+ 	struct qeth_qdio_out_q **new_qs;
+ 	int i;
+ 
+ 	new_qs = kcalloc(new_count, sizeof(*new_qs), GFP_KERNEL);
+ 	if (!new_qs)
+ 		return -ENOMEM;
+ 
+ 	for (i = 0; i < new_count; i++) {
+ 		if (i < card->qdio.no_out_queues)
+ 			new_qs[i] = card->qdio.out_qs[i];
+ 		else {
+ 			new_qs[i] = qeth_alloc_output_queue();
+ 			if (!new_qs[i]) {
+ 				while (--i >= card->qdio.no_out_queues)
+ 					qeth_free_output_queue(new_qs[i]);
+ 				kfree(new_qs);
+ 				return -ENOMEM;
+ 			}
+ 		}
+ 	}
+ 
+ 	for (i = new_count; i < card->qdio.no_out_queues; i++)
+ 		qeth_free_output_queue(card->qdio.out_qs[i]);
+ 
+ 	kfree(card->qdio.out_qs);
+ 	card->qdio.out_qs = new_qs;
+ 	card->qdio.no_out_queues = new_count;
+ 	return 0;
+ }

 static void qeth_osa_set_output_queues(struct qeth_card *card, bool single)
 {
 	unsigned int max = single ? 1 : card->dev->num_tx_queues;
 	if (card->qdio.no_out_queues == max)
 		return;
 	if (atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED)
 		qeth_free_qdio_queues(card);
 	if (max == 1 && card->qdio.do_prio_queueing != QETH_PRIOQ_DEFAULT)
 		dev_info(&card->gdev->dev, "Priority Queueing not supported\n");
- 	card->qdio.no_out_queues = max;
+ 	if (qeth_realloc_output_queues(card, max))
+ 		dev_err(&card->gdev->dev, "Failed to reallocate output queues\n");
 }
