Makes popping each member of the list a bit easier.
Signed-off-by: Jarno Rajahalme <[email protected]>
---
lib/dp-packet.c | 5 ++---
lib/list.h | 6 ++++++
lib/lldp/lldpd-structs.c | 5 ++---
lib/lldp/lldpd.c | 5 ++---
lib/mcast-snooping.c | 5 ++---
lib/ofp-util.c | 5 ++---
lib/ofpbuf.c | 5 ++---
lib/ovs-lldp.c | 8 ++------
lib/ovs-numa.c | 5 ++---
lib/ovs-rcu.c | 5 ++---
lib/vconn.c | 6 ++----
ofproto/bundles.c | 5 ++---
ofproto/connmgr.c | 16 ++++++----------
ofproto/ofproto-dpif-rid.c | 5 ++---
ofproto/ofproto-dpif-xlate.c | 5 ++---
ofproto/ofproto-dpif.c | 15 ++++++---------
ofproto/ofproto.c | 5 ++---
17 files changed, 46 insertions(+), 65 deletions(-)
diff --git a/lib/dp-packet.c b/lib/dp-packet.c
index 88b5708..8a4cf43 100644
--- a/lib/dp-packet.c
+++ b/lib/dp-packet.c
@@ -465,10 +465,9 @@ dp_packet_to_string(const struct dp_packet *b, size_t
maxbytes)
void
dp_packet_list_delete(struct ovs_list *list)
{
- struct dp_packet *b, *next;
+ struct dp_packet *b;
- LIST_FOR_EACH_SAFE (b, next, list_node, list) {
- list_remove(&b->list_node);
+ LIST_FOR_EACH_POP (b, list_node, list) {
dp_packet_delete(b);
}
}
diff --git a/lib/list.h b/lib/list.h
index b40bbef..bca5d5c 100644
--- a/lib/list.h
+++ b/lib/list.h
@@ -73,6 +73,12 @@ static inline bool list_is_short(const struct ovs_list *);
? INIT_CONTAINER(NEXT, (ITER)->MEMBER.next, MEMBER), 1 \
: 0); \
(ITER) = (NEXT))
+#define LIST_FOR_EACH_POP(ITER, MEMBER, LIST) \
+ for (struct ovs_list *next__ = (LIST)->next; \
+ (next__ != (LIST) \
+ ? (INIT_CONTAINER(ITER, next__, MEMBER), \
+ (next__ = list_remove(next__)), 1) \
+ : 0);)
/* Inline implementations. */
diff --git a/lib/lldp/lldpd-structs.c b/lib/lldp/lldpd-structs.c
index e2f8f22..b78c2e1 100644
--- a/lib/lldp/lldpd-structs.c
+++ b/lib/lldp/lldpd-structs.c
@@ -28,13 +28,12 @@ VLOG_DEFINE_THIS_MODULE(lldpd_structs);
void
lldpd_chassis_mgmt_cleanup(struct lldpd_chassis *chassis)
{
- struct lldpd_mgmt *mgmt, *mgmt_next;
+ struct lldpd_mgmt *mgmt;
VLOG_DBG("cleanup management addresses for chassis %s",
chassis->c_name ? chassis->c_name : "(unknown)");
- LIST_FOR_EACH_SAFE (mgmt, mgmt_next, m_entries, &chassis->c_mgmt) {
- list_remove(&mgmt->m_entries);
+ LIST_FOR_EACH_POP (mgmt, m_entries, &chassis->c_mgmt) {
free(mgmt);
}
diff --git a/lib/lldp/lldpd.c b/lib/lldp/lldpd.c
index 7f6e348..71d3938 100644
--- a/lib/lldp/lldpd.c
+++ b/lib/lldp/lldpd.c
@@ -164,7 +164,7 @@ static void
lldpd_move_chassis(struct lldpd_chassis *ochassis,
struct lldpd_chassis *chassis)
{
- struct lldpd_mgmt *mgmt, *mgmt_next;
+ struct lldpd_mgmt *mgmt;
int refcount = ochassis->c_refcount;
int index = ochassis->c_index;
struct ovs_list listcopy;
@@ -182,8 +182,7 @@ lldpd_move_chassis(struct lldpd_chassis *ochassis,
list_init(&ochassis->c_mgmt);
/* Copy of management addresses */
- LIST_FOR_EACH_SAFE (mgmt, mgmt_next, m_entries, &chassis->c_mgmt) {
- list_remove(&mgmt->m_entries);
+ LIST_FOR_EACH_POP (mgmt, m_entries, &chassis->c_mgmt) {
list_insert(&ochassis->c_mgmt, &mgmt->m_entries);
}
diff --git a/lib/mcast-snooping.c b/lib/mcast-snooping.c
index 6fe3890..c3ffd6b 100644
--- a/lib/mcast-snooping.c
+++ b/lib/mcast-snooping.c
@@ -307,10 +307,9 @@ static void
mcast_snooping_flush_group(struct mcast_snooping *ms, struct mcast_group *grp)
OVS_REQ_WRLOCK(ms->rwlock)
{
- struct mcast_group_bundle *b, *next_b;
+ struct mcast_group_bundle *b;
- LIST_FOR_EACH_SAFE (b, next_b, bundle_node, &grp->bundle_lru) {
- list_remove(&b->bundle_node);
+ LIST_FOR_EACH_POP (b, bundle_node, &grp->bundle_lru) {
free(b);
}
mcast_snooping_flush_group__(ms, grp);
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index a0da289..277fdfe 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -6886,10 +6886,9 @@ ofputil_decode_port_stats_request(const struct
ofp_header *request,
void
ofputil_bucket_list_destroy(struct ovs_list *buckets)
{
- struct ofputil_bucket *bucket, *next_bucket;
+ struct ofputil_bucket *bucket;
- LIST_FOR_EACH_SAFE (bucket, next_bucket, list_node, buckets) {
- list_remove(&bucket->list_node);
+ LIST_FOR_EACH_POP (bucket, list_node, buckets) {
free(bucket->ofpacts);
free(bucket);
}
diff --git a/lib/ofpbuf.c b/lib/ofpbuf.c
index 7510edb..c27c552 100644
--- a/lib/ofpbuf.c
+++ b/lib/ofpbuf.c
@@ -477,10 +477,9 @@ ofpbuf_to_string(const struct ofpbuf *b, size_t maxbytes)
void
ofpbuf_list_delete(struct ovs_list *list)
{
- struct ofpbuf *b, *next;
+ struct ofpbuf *b;
- LIST_FOR_EACH_SAFE (b, next, list_node, list) {
- list_remove(&b->list_node);
+ LIST_FOR_EACH_POP (b, list_node, list) {
ofpbuf_delete(b);
}
}
diff --git a/lib/ovs-lldp.c b/lib/ovs-lldp.c
index db97648..197aecf 100644
--- a/lib/ovs-lldp.c
+++ b/lib/ovs-lldp.c
@@ -421,12 +421,9 @@ aa_get_vlan_queued(struct ovs_list *list)
ovs_mutex_lock(&mutex);
HMAP_FOR_EACH (lldp, hmap_node, all_lldps) {
- struct bridge_aa_vlan *node, *node_next;
+ struct bridge_aa_vlan *node;
- LIST_FOR_EACH_SAFE (node,
- node_next,
- list_node,
- &lldp->active_mapping_queue) {
+ LIST_FOR_EACH_POP (node, list_node, &lldp->active_mapping_queue) {
struct bridge_aa_vlan *copy;
copy = xmalloc(sizeof *copy);
@@ -437,7 +434,6 @@ aa_get_vlan_queued(struct ovs_list *list)
list_push_back(list, ©->list_node);
/* Cleanup */
- list_remove(&node->list_node);
free(node->port_name);
free(node);
}
diff --git a/lib/ovs-numa.c b/lib/ovs-numa.c
index 3aa1036..5bed2b5 100644
--- a/lib/ovs-numa.c
+++ b/lib/ovs-numa.c
@@ -380,10 +380,9 @@ ovs_numa_dump_cores_on_numa(int numa_id)
void
ovs_numa_dump_destroy(struct ovs_numa_dump *dump)
{
- struct ovs_numa_info *iter, *next;
+ struct ovs_numa_info *iter;
- LIST_FOR_EACH_SAFE (iter, next, list_node, &dump->dump) {
- list_remove(&iter->list_node);
+ LIST_FOR_EACH_POP (iter, list_node, &dump->dump) {
free(iter);
}
diff --git a/lib/ovs-rcu.c b/lib/ovs-rcu.c
index 5276981..76659bb 100644
--- a/lib/ovs-rcu.c
+++ b/lib/ovs-rcu.c
@@ -239,7 +239,7 @@ ovsrcu_postpone__(void (*function)(void *aux), void *aux)
static bool
ovsrcu_call_postponed(void)
{
- struct ovsrcu_cbset *cbset, *next_cbset;
+ struct ovsrcu_cbset *cbset;
struct ovs_list cbsets;
guarded_list_pop_all(&flushed_cbsets, &cbsets);
@@ -249,13 +249,12 @@ ovsrcu_call_postponed(void)
ovsrcu_synchronize();
- LIST_FOR_EACH_SAFE (cbset, next_cbset, list_node, &cbsets) {
+ LIST_FOR_EACH_POP (cbset, list_node, &cbsets) {
struct ovsrcu_cb *cb;
for (cb = cbset->cbs; cb < &cbset->cbs[cbset->n_cbs]; cb++) {
cb->function(cb->aux);
}
- list_remove(&cbset->list_node);
free(cbset);
}
diff --git a/lib/vconn.c b/lib/vconn.c
index a59829d..c033b48 100644
--- a/lib/vconn.c
+++ b/lib/vconn.c
@@ -881,13 +881,11 @@ int
vconn_transact_multiple_noreply(struct vconn *vconn, struct ovs_list *requests,
struct ofpbuf **replyp)
{
- struct ofpbuf *request, *next;
+ struct ofpbuf *request;
- LIST_FOR_EACH_SAFE (request, next, list_node, requests) {
+ LIST_FOR_EACH_POP (request, list_node, requests) {
int error;
- list_remove(&request->list_node);
-
error = vconn_transact_noreply(vconn, request, replyp);
if (error || *replyp) {
ofpbuf_list_delete(requests);
diff --git a/ofproto/bundles.c b/ofproto/bundles.c
index 4d9deac..c409091 100644
--- a/ofproto/bundles.c
+++ b/ofproto/bundles.c
@@ -100,11 +100,10 @@ ofp_bundle_create(uint32_t id, uint16_t flags)
static void
ofp_bundle_remove(struct ofconn *ofconn, struct ofp_bundle *item)
{
- struct bundle_message *msg, *next;
+ struct bundle_message *msg;
struct hmap *bundles;
- LIST_FOR_EACH_SAFE (msg, next, node, &item->msg_list) {
- list_remove(&msg->node);
+ LIST_FOR_EACH_POP (msg, node, &item->msg_list) {
free(msg->msg);
free(msg);
}
diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
index f34652b..707385f 100644
--- a/ofproto/connmgr.c
+++ b/ofproto/connmgr.c
@@ -1093,10 +1093,9 @@ ofconn_send_reply(const struct ofconn *ofconn, struct
ofpbuf *msg)
void
ofconn_send_replies(const struct ofconn *ofconn, struct ovs_list *replies)
{
- struct ofpbuf *reply, *next;
+ struct ofpbuf *reply;
- LIST_FOR_EACH_SAFE (reply, next, list_node, replies) {
- list_remove(&reply->list_node);
+ LIST_FOR_EACH_POP (reply, list_node, replies) {
ofconn_send_reply(ofconn, reply);
}
}
@@ -1724,11 +1723,9 @@ connmgr_send_packet_in(struct connmgr *mgr,
static void
do_send_packet_ins(struct ofconn *ofconn, struct ovs_list *txq)
{
- struct ofpbuf *pin, *next_pin;
-
- LIST_FOR_EACH_SAFE (pin, next_pin, list_node, txq) {
- list_remove(&pin->list_node);
+ struct ofpbuf *pin;
+ LIST_FOR_EACH_POP (pin, list_node, txq) {
if (rconn_send_with_limit(ofconn->rconn, pin,
ofconn->packet_in_counter, 100) == EAGAIN) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
@@ -2255,12 +2252,11 @@ ofmonitor_flush(struct connmgr *mgr)
struct ofconn *ofconn;
LIST_FOR_EACH (ofconn, node, &mgr->all_conns) {
- struct ofpbuf *msg, *next;
+ struct ofpbuf *msg;
- LIST_FOR_EACH_SAFE (msg, next, list_node, &ofconn->updates) {
+ LIST_FOR_EACH_POP (msg, list_node, &ofconn->updates) {
unsigned int n_bytes;
- list_remove(&msg->list_node);
ofconn_send(ofconn, msg, ofconn->monitor_counter);
n_bytes = rconn_packet_counter_n_bytes(ofconn->monitor_counter);
if (!ofconn->monitor_paused && n_bytes > 128 * 1024) {
diff --git a/ofproto/ofproto-dpif-rid.c b/ofproto/ofproto-dpif-rid.c
index 17bcede..f1b3bdc 100644
--- a/ofproto/ofproto-dpif-rid.c
+++ b/ofproto/ofproto-dpif-rid.c
@@ -67,7 +67,7 @@ recirc_run(void)
/* Do maintenance at most 4 times / sec. */
ovs_mutex_lock(&mutex);
if (now - last > 250) {
- struct recirc_id_node *node, *next;
+ struct recirc_id_node *node;
last = now;
@@ -86,8 +86,7 @@ recirc_run(void)
/* Delete the expired. These have been lingering for at least 250 ms,
* which should be enough for any ongoing recirculations to be
* finished. */
- LIST_FOR_EACH_SAFE (node, next, exp_node, &expired) {
- list_remove(&node->exp_node);
+ LIST_FOR_EACH_POP (node, exp_node, &expired) {
cmap_remove(&id_map, &node->id_node, node->id);
ovsrcu_postpone(free, node);
}
diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
index 4f82238..55ae683 100644
--- a/ofproto/ofproto-dpif-xlate.c
+++ b/ofproto/ofproto-dpif-xlate.c
@@ -949,14 +949,13 @@ xlate_bundle_set(struct ofproto_dpif *ofproto, struct
ofbundle *ofbundle,
static void
xlate_xbundle_remove(struct xlate_cfg *xcfg, struct xbundle *xbundle)
{
- struct xport *xport, *next;
+ struct xport *xport;
if (!xbundle) {
return;
}
- LIST_FOR_EACH_SAFE (xport, next, bundle_node, &xbundle->xports) {
- list_remove(&xport->bundle_node);
+ LIST_FOR_EACH_POP (xport, bundle_node, &xbundle->xports) {
xport->xbundle = NULL;
}
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 837ae0b..01d99c5 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -886,7 +886,7 @@ open_dpif_backer(const char *type, struct dpif_backer
**backerp)
struct dpif_port port;
struct shash_node *node;
struct ovs_list garbage_list;
- struct odp_garbage *garbage, *next;
+ struct odp_garbage *garbage;
struct sset names;
char *backer_name;
@@ -964,9 +964,8 @@ open_dpif_backer(const char *type, struct dpif_backer
**backerp)
}
dpif_port_dump_done(&port_dump);
- LIST_FOR_EACH_SAFE (garbage, next, list_node, &garbage_list) {
+ LIST_FOR_EACH_POP (garbage, list_node, &garbage_list) {
dpif_port_del(backer->dpif, garbage->odp_port);
- list_remove(&garbage->list_node);
free(garbage);
}
@@ -1377,7 +1376,7 @@ static void
destruct(struct ofproto *ofproto_)
{
struct ofproto_dpif *ofproto = ofproto_dpif_cast(ofproto_);
- struct ofproto_packet_in *pin, *next_pin;
+ struct ofproto_packet_in *pin;
struct rule_dpif *rule;
struct oftable *table;
struct ovs_list pins;
@@ -1400,8 +1399,7 @@ destruct(struct ofproto *ofproto_)
}
guarded_list_pop_all(&ofproto->pins, &pins);
- LIST_FOR_EACH_SAFE (pin, next_pin, list_node, &pins) {
- list_remove(&pin->list_node);
+ LIST_FOR_EACH_POP (pin, list_node, &pins) {
free(CONST_CAST(void *, pin->up.packet));
free(pin);
}
@@ -1456,13 +1454,12 @@ run(struct ofproto *ofproto_)
/* Do not perform any periodic activity required by 'ofproto' while
* waiting for flow restore to complete. */
if (!ofproto_get_flow_restore_wait()) {
- struct ofproto_packet_in *pin, *next_pin;
+ struct ofproto_packet_in *pin;
struct ovs_list pins;
guarded_list_pop_all(&ofproto->pins, &pins);
- LIST_FOR_EACH_SAFE (pin, next_pin, list_node, &pins) {
+ LIST_FOR_EACH_POP (pin, list_node, &pins) {
connmgr_send_packet_in(ofproto->up.connmgr, pin);
- list_remove(&pin->list_node);
free(CONST_CAST(void *, pin->up.packet));
free(pin);
}
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index a36a1f8..927521b 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -2961,9 +2961,9 @@ static void
learned_cookies_flush(struct ofproto *ofproto, struct ovs_list *dead_cookies)
OVS_REQUIRES(ofproto_mutex)
{
- struct learned_cookie *c, *next;
+ struct learned_cookie *c;
- LIST_FOR_EACH_SAFE (c, next, u.list_node, dead_cookies) {
+ LIST_FOR_EACH_POP (c, u.list_node, dead_cookies) {
struct rule_criteria criteria;
struct rule_collection rules;
struct match match;
@@ -2977,7 +2977,6 @@ learned_cookies_flush(struct ofproto *ofproto, struct
ovs_list *dead_cookies)
rule_criteria_destroy(&criteria);
rule_collection_destroy(&rules);
- list_remove(&c->u.list_node);
free(c);
}
}
--
1.7.10.4
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev