Skip to content

Commit

Permalink
Use ovs_refcount_unref_relaxed.
Browse files Browse the repository at this point in the history
After a quick analysis, in most cases the access to refcounted objects
is clearly protected either with an explicit lock/mutex, or RCU. there
are only a few places where I left a call to ovs_refcount_unref().
Upon closer analysis it may well be that those could also use the
relaxed form.

Signed-off-by: Jarno Rajahalme <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
Jarno Rajahalme committed Jul 7, 2014
1 parent 6969766 commit 24f8381
Show file tree
Hide file tree
Showing 11 changed files with 13 additions and 13 deletions.
2 changes: 1 addition & 1 deletion lib/bfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -493,7 +493,7 @@ bfd_ref(const struct bfd *bfd_)
void
bfd_unref(struct bfd *bfd) OVS_EXCLUDED(mutex)
{
if (bfd && ovs_refcount_unref(&bfd->ref_cnt) == 1) {
if (bfd && ovs_refcount_unref_relaxed(&bfd->ref_cnt) == 1) {
ovs_mutex_lock(&mutex);
bfd_status_changed(bfd);
hmap_remove(all_bfds, &bfd->node);
Expand Down
2 changes: 1 addition & 1 deletion lib/cfm.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ cfm_unref(struct cfm *cfm) OVS_EXCLUDED(mutex)
return;
}

if (ovs_refcount_unref(&cfm->ref_cnt) != 1) {
if (ovs_refcount_unref_relaxed(&cfm->ref_cnt) != 1) {
return;
}

Expand Down
6 changes: 3 additions & 3 deletions lib/dpif-netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -605,7 +605,7 @@ dp_netdev_unref(struct dp_netdev *dp)
/* Take dp_netdev_mutex so that, if dp->ref_cnt falls to zero, we can't
* get a new reference to 'dp' through the 'dp_netdevs' shash. */
ovs_mutex_lock(&dp_netdev_mutex);
if (ovs_refcount_unref(&dp->ref_cnt) == 1) {
if (ovs_refcount_unref_relaxed(&dp->ref_cnt) == 1) {
dp_netdev_free(dp);
}
ovs_mutex_unlock(&dp_netdev_mutex);
Expand All @@ -627,7 +627,7 @@ dpif_netdev_destroy(struct dpif *dpif)
struct dp_netdev *dp = get_dp_netdev(dpif);

if (!atomic_flag_test_and_set(&dp->destroyed)) {
if (ovs_refcount_unref(&dp->ref_cnt) == 1) {
if (ovs_refcount_unref_relaxed(&dp->ref_cnt) == 1) {
/* Can't happen: 'dpif' still owns a reference to 'dp'. */
OVS_NOT_REACHED();
}
Expand Down Expand Up @@ -859,7 +859,7 @@ port_destroy__(struct dp_netdev_port *port)
static void
port_unref(struct dp_netdev_port *port)
{
if (port && ovs_refcount_unref(&port->ref_cnt) == 1) {
if (port && ovs_refcount_unref_relaxed(&port->ref_cnt) == 1) {
ovsrcu_postpone(port_destroy__, port);
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/lacp.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ lacp_ref(const struct lacp *lacp_)
void
lacp_unref(struct lacp *lacp) OVS_EXCLUDED(mutex)
{
if (lacp && ovs_refcount_unref(&lacp->ref_cnt) == 1) {
if (lacp && ovs_refcount_unref_relaxed(&lacp->ref_cnt) == 1) {
struct slave *slave, *next;

lacp_lock();
Expand Down
2 changes: 1 addition & 1 deletion lib/mcast-snooping.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ mcast_snooping_unref(struct mcast_snooping *ms)
return;
}

if (ovs_refcount_unref(&ms->ref_cnt) == 1) {
if (ovs_refcount_unref_relaxed(&ms->ref_cnt) == 1) {
mcast_snooping_flush(ms);
hmap_destroy(&ms->table);
ovs_rwlock_destroy(&ms->rwlock);
Expand Down
2 changes: 1 addition & 1 deletion lib/stp.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ stp_ref(const struct stp *stp_)
void
stp_unref(struct stp *stp)
{
if (stp && ovs_refcount_unref(&stp->ref_cnt) == 1) {
if (stp && ovs_refcount_unref_relaxed(&stp->ref_cnt) == 1) {
ovs_mutex_lock(&mutex);
list_remove(&stp->node);
ovs_mutex_unlock(&mutex);
Expand Down
2 changes: 1 addition & 1 deletion ofproto/bond.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ bond_unref(struct bond *bond)
struct bond_slave *slave, *next_slave;
struct bond_pr_rule_op *pr_op, *next_op;

if (!bond || ovs_refcount_unref(&bond->ref_cnt) != 1) {
if (!bond || ovs_refcount_unref_relaxed(&bond->ref_cnt) != 1) {
return;
}

Expand Down
2 changes: 1 addition & 1 deletion ofproto/netflow.c
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ netflow_ref(const struct netflow *nf_)
void
netflow_unref(struct netflow *nf)
{
if (nf && ovs_refcount_unref(&nf->ref_cnt) == 1) {
if (nf && ovs_refcount_unref_relaxed(&nf->ref_cnt) == 1) {
int orig;

atomic_sub(&netflow_count, 1, &orig);
Expand Down
2 changes: 1 addition & 1 deletion ofproto/ofproto-dpif-ipfix.c
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ dpif_ipfix_clear(struct dpif_ipfix *di) OVS_REQUIRES(mutex)
void
dpif_ipfix_unref(struct dpif_ipfix *di) OVS_EXCLUDED(mutex)
{
if (di && ovs_refcount_unref(&di->ref_cnt) == 1) {
if (di && ovs_refcount_unref_relaxed(&di->ref_cnt) == 1) {
ovs_mutex_lock(&mutex);
dpif_ipfix_clear(di);
dpif_ipfix_bridge_exporter_destroy(&di->bridge_exporter);
Expand Down
2 changes: 1 addition & 1 deletion ofproto/ofproto-dpif-sflow.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,7 @@ dpif_sflow_get_probability(const struct dpif_sflow *ds) OVS_EXCLUDED(mutex)
void
dpif_sflow_unref(struct dpif_sflow *ds) OVS_EXCLUDED(mutex)
{
if (ds && ovs_refcount_unref(&ds->ref_cnt) == 1) {
if (ds && ovs_refcount_unref_relaxed(&ds->ref_cnt) == 1) {
struct dpif_sflow_port *dsp, *next;

route_table_unregister();
Expand Down
2 changes: 1 addition & 1 deletion ofproto/ofproto.c
Original file line number Diff line number Diff line change
Expand Up @@ -2545,7 +2545,7 @@ ofproto_rule_ref(struct rule *rule)
void
ofproto_rule_unref(struct rule *rule)
{
if (rule && ovs_refcount_unref(&rule->ref_count) == 1) {
if (rule && ovs_refcount_unref_relaxed(&rule->ref_count) == 1) {
ovsrcu_postpone(rule_destroy_cb, rule);
}
}
Expand Down

0 comments on commit 24f8381

Please sign in to comment.