]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: yield more when generating UPDATEs
authorQuentin Young <qlyoung@cumulusnetworks.com>
Mon, 13 Nov 2017 08:18:49 +0000 (03:18 -0500)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Thu, 30 Nov 2017 21:18:07 +0000 (16:18 -0500)
In the same vein as the round-robin input commit, this re-adds logic for
limiting the amount of time spent generating UPDATEs per generation
cycle. Missed this when shifting around wpkt_quanta; prior to MT it
limited both calls to write() as well as UPDATE generation.

bgpd/bgp_packet.c

index d814d6eb99c447fab35389e1972cb10f612044b2..fe633413c2bae7e69f52c0fdc1d17260a8905d56 100644 (file)
@@ -371,9 +371,14 @@ int bgp_generate_updgrp_packets(struct thread *thread)
        struct stream *s;
        struct peer_af *paf;
        struct bpacket *next_pkt;
+       uint32_t wpq;
+       uint32_t generated = 0;
        afi_t afi;
        safi_t safi;
 
+       wpq = atomic_load_explicit(&peer->bgp->wpkt_quanta,
+                                  memory_order_relaxed);
+
        /*
         * The code beyond this part deals with update packets, proceed only
         * if peer is Established and updates are not on hold (as part of
@@ -458,7 +463,7 @@ int bgp_generate_updgrp_packets(struct thread *thread)
                                bgp_writes_on(peer);
                                bpacket_queue_advance_peer(paf);
                        }
-       } while (s);
+       } while (s && (++generated < wpq));
 
        bgp_write_proceed_actions(peer);