qeth: enforce a rate limit for inbound scatter gather messages

under memory pressure scatter gather mode switching messages must be
rate limited.

Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Frank Blaschka and committed by Jeff Garzik cde46035 d0a34f98

+8 -5
+8 -5
drivers/s390/net/qeth_main.c
··· 2803 2803 if (newcount < count) { 2804 2804 /* we are in memory shortage so we switch back to 2805 2805 traditional skb allocation and drop packages */ 2806 - if (atomic_cmpxchg(&card->force_alloc_skb, 0, 1)) 2807 - printk(KERN_WARNING 2808 - "qeth: switch to alloc skb\n"); 2806 + if (!atomic_read(&card->force_alloc_skb) && 2807 + net_ratelimit()) 2808 + PRINT_WARN("Switch to alloc skb\n"); 2809 + atomic_set(&card->force_alloc_skb, 3); 2809 2810 count = newcount; 2810 2811 } else { 2811 - if (atomic_cmpxchg(&card->force_alloc_skb, 1, 0)) 2812 - printk(KERN_WARNING "qeth: switch to sg\n"); 2812 + if ((atomic_read(&card->force_alloc_skb) == 1) && 2813 + net_ratelimit()) 2814 + PRINT_WARN("Switch to sg\n"); 2815 + atomic_add_unless(&card->force_alloc_skb, -1, 0); 2813 2816 } 2814 2817 2815 2818 /*