mirror of https://gitee.com/openkylin/linux.git
s390/qeth: cancel RX reclaim work earlier
When qeth's napi poll code fails to refill an entirely empty RX ring, it
kicks off buffer_reclaim_work to try again later.
Make sure that this worker is cancelled when setting the qeth device
offline. Otherwise a RX refill action can unexpectedly end up running
concurrently to bigger re-configurations (eg. resizing the buffer pool),
without any locking.
Fixes: b333293058
("qeth: add support for af_iucv HiperSockets transport")
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
1741385280
commit
0e635c2a87
|
@ -2392,7 +2392,6 @@ static void qeth_free_qdio_queues(struct qeth_card *card)
|
|||
return;
|
||||
|
||||
qeth_free_cq(card);
|
||||
cancel_delayed_work_sync(&card->buffer_reclaim_work);
|
||||
for (j = 0; j < QDIO_MAX_BUFFERS_PER_Q; ++j) {
|
||||
if (card->qdio.in_q->bufs[j].rx_skb)
|
||||
dev_kfree_skb_any(card->qdio.in_q->bufs[j].rx_skb);
|
||||
|
|
|
@ -284,6 +284,7 @@ static void qeth_l2_stop_card(struct qeth_card *card)
|
|||
if (card->state == CARD_STATE_SOFTSETUP) {
|
||||
qeth_clear_ipacmd_list(card);
|
||||
qeth_drain_output_queues(card);
|
||||
cancel_delayed_work_sync(&card->buffer_reclaim_work);
|
||||
card->state = CARD_STATE_DOWN;
|
||||
}
|
||||
|
||||
|
|
|
@ -1178,6 +1178,7 @@ static void qeth_l3_stop_card(struct qeth_card *card)
|
|||
qeth_l3_clear_ip_htable(card, 1);
|
||||
qeth_clear_ipacmd_list(card);
|
||||
qeth_drain_output_queues(card);
|
||||
cancel_delayed_work_sync(&card->buffer_reclaim_work);
|
||||
card->state = CARD_STATE_DOWN;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue