Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b69d206 authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge



Antonio Quartulli says:

====================
pull request [net-next]: batman-adv 20160223

This is a cleanup patchset: first the BATADV_BONDING_TQ_THRESHOLD
constant gets removed as it was defined but not used anywhere,
then all our *_free_ref functions are renamed to *_put in order
to follow the kernel naming convention by Sven Eckelmann.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents a30a9ea6 7e2366c6
Loading
Loading
Loading
Loading
+36 −36
Original line number Diff line number Diff line
@@ -287,8 +287,8 @@ batadv_iv_ogm_orig_get(struct batadv_priv *bat_priv, const u8 *addr)

free_orig_node:
	/* free twice, as batadv_orig_node_new sets refcount to 2 */
	batadv_orig_node_free_ref(orig_node);
	batadv_orig_node_free_ref(orig_node);
	batadv_orig_node_put(orig_node);
	batadv_orig_node_put(orig_node);

	return NULL;
}
@@ -515,7 +515,7 @@ static void batadv_iv_ogm_emit(struct batadv_forw_packet *forw_packet)

out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
}

/**
@@ -617,7 +617,7 @@ batadv_iv_ogm_can_aggregate(const struct batadv_ogm_packet *new_bat_ogm_packet,

out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	return res;
}

@@ -711,9 +711,9 @@ static void batadv_iv_ogm_aggregate_new(const unsigned char *packet_buff,
	if (!own_packet)
		atomic_inc(&bat_priv->batman_queue_left);
out_free_outgoing:
	batadv_hardif_free_ref(if_outgoing);
	batadv_hardif_put(if_outgoing);
out_free_incoming:
	batadv_hardif_free_ref(if_incoming);
	batadv_hardif_put(if_incoming);
}

/* aggregate a new packet into the existing ogm packet */
@@ -958,7 +958,7 @@ static void batadv_iv_ogm_schedule(struct batadv_hard_iface *hard_iface)

out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
}

/**
@@ -1005,7 +1005,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
		    tmp_neigh_node->if_incoming == if_incoming &&
		    kref_get_unless_zero(&tmp_neigh_node->refcount)) {
			if (WARN(neigh_node, "too many matching neigh_nodes"))
				batadv_neigh_node_free_ref(neigh_node);
				batadv_neigh_node_put(neigh_node);
			neigh_node = tmp_neigh_node;
			continue;
		}
@@ -1026,7 +1026,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
		neigh_ifinfo->bat_iv.tq_avg = tq_avg;
		spin_unlock_bh(&tmp_neigh_node->ifinfo_lock);

		batadv_neigh_ifinfo_free_ref(neigh_ifinfo);
		batadv_neigh_ifinfo_put(neigh_ifinfo);
		neigh_ifinfo = NULL;
	}

@@ -1041,7 +1041,7 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
						     ethhdr->h_source,
						     orig_node, orig_tmp);

		batadv_orig_node_free_ref(orig_tmp);
		batadv_orig_node_put(orig_tmp);
		if (!neigh_node)
			goto unlock;
	} else {
@@ -1116,13 +1116,13 @@ batadv_iv_ogm_orig_update(struct batadv_priv *bat_priv,
	rcu_read_unlock();
out:
	if (neigh_node)
		batadv_neigh_node_free_ref(neigh_node);
		batadv_neigh_node_put(neigh_node);
	if (router)
		batadv_neigh_node_free_ref(router);
		batadv_neigh_node_put(router);
	if (neigh_ifinfo)
		batadv_neigh_ifinfo_free_ref(neigh_ifinfo);
		batadv_neigh_ifinfo_put(neigh_ifinfo);
	if (router_ifinfo)
		batadv_neigh_ifinfo_free_ref(router_ifinfo);
		batadv_neigh_ifinfo_put(router_ifinfo);
}

/**
@@ -1192,7 +1192,7 @@ static int batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,
	neigh_ifinfo = batadv_neigh_ifinfo_new(neigh_node, if_outgoing);
	if (neigh_ifinfo) {
		neigh_rq_count = neigh_ifinfo->bat_iv.real_packet_count;
		batadv_neigh_ifinfo_free_ref(neigh_ifinfo);
		batadv_neigh_ifinfo_put(neigh_ifinfo);
	} else {
		neigh_rq_count = 0;
	}
@@ -1265,7 +1265,7 @@ static int batadv_iv_ogm_calc_tq(struct batadv_orig_node *orig_node,

out:
	if (neigh_node)
		batadv_neigh_node_free_ref(neigh_node);
		batadv_neigh_node_put(neigh_node);
	return ret;
}

@@ -1306,7 +1306,7 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,

	orig_ifinfo = batadv_orig_ifinfo_new(orig_node, if_outgoing);
	if (WARN_ON(!orig_ifinfo)) {
		batadv_orig_node_free_ref(orig_node);
		batadv_orig_node_put(orig_node);
		return 0;
	}

@@ -1353,7 +1353,7 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,
		packet_count = bitmap_weight(bitmap,
					     BATADV_TQ_LOCAL_WINDOW_SIZE);
		neigh_ifinfo->bat_iv.real_packet_count = packet_count;
		batadv_neigh_ifinfo_free_ref(neigh_ifinfo);
		batadv_neigh_ifinfo_put(neigh_ifinfo);
	}
	rcu_read_unlock();

@@ -1367,8 +1367,8 @@ batadv_iv_ogm_update_seqnos(const struct ethhdr *ethhdr,

out:
	spin_unlock_bh(&orig_node->bat_iv.ogm_cnt_lock);
	batadv_orig_node_free_ref(orig_node);
	batadv_orig_ifinfo_free_ref(orig_ifinfo);
	batadv_orig_node_put(orig_node);
	batadv_orig_ifinfo_put(orig_ifinfo);
	return ret;
}

@@ -1514,7 +1514,7 @@ batadv_iv_ogm_process_per_outif(const struct sk_buff *skb, int ogm_offset,
					  ogm_packet, if_incoming,
					  if_outgoing, dup_status);
	}
	batadv_orig_ifinfo_free_ref(orig_ifinfo);
	batadv_orig_ifinfo_put(orig_ifinfo);

	/* only forward for specific interface, not for the default one. */
	if (if_outgoing == BATADV_IF_DEFAULT)
@@ -1563,18 +1563,18 @@ batadv_iv_ogm_process_per_outif(const struct sk_buff *skb, int ogm_offset,

out_neigh:
	if ((orig_neigh_node) && (!is_single_hop_neigh))
		batadv_orig_node_free_ref(orig_neigh_node);
		batadv_orig_node_put(orig_neigh_node);
out:
	if (router_ifinfo)
		batadv_neigh_ifinfo_free_ref(router_ifinfo);
		batadv_neigh_ifinfo_put(router_ifinfo);
	if (router)
		batadv_neigh_node_free_ref(router);
		batadv_neigh_node_put(router);
	if (router_router)
		batadv_neigh_node_free_ref(router_router);
		batadv_neigh_node_put(router_router);
	if (orig_neigh_router)
		batadv_neigh_node_free_ref(orig_neigh_router);
		batadv_neigh_node_put(orig_neigh_router);
	if (hardif_neigh)
		batadv_hardif_neigh_free_ref(hardif_neigh);
		batadv_hardif_neigh_put(hardif_neigh);

	kfree_skb(skb_priv);
}
@@ -1697,7 +1697,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset,

		batadv_dbg(BATADV_DBG_BATMAN, bat_priv,
			   "Drop packet: originator packet from myself (via neighbor)\n");
		batadv_orig_node_free_ref(orig_neigh_node);
		batadv_orig_node_put(orig_neigh_node);
		return;
	}

@@ -1735,7 +1735,7 @@ static void batadv_iv_ogm_process(const struct sk_buff *skb, int ogm_offset,
	}
	rcu_read_unlock();

	batadv_orig_node_free_ref(orig_node);
	batadv_orig_node_put(orig_node);
}

static int batadv_iv_ogm_receive(struct sk_buff *skb,
@@ -1805,7 +1805,7 @@ batadv_iv_ogm_orig_print_neigh(struct batadv_orig_node *orig_node,
			   neigh_node->addr,
			   n_ifinfo->bat_iv.tq_avg);

		batadv_neigh_ifinfo_free_ref(n_ifinfo);
		batadv_neigh_ifinfo_put(n_ifinfo);
	}
}

@@ -1868,9 +1868,9 @@ static void batadv_iv_ogm_orig_print(struct batadv_priv *bat_priv,
			batman_count++;

next:
			batadv_neigh_node_free_ref(neigh_node);
			batadv_neigh_node_put(neigh_node);
			if (n_ifinfo)
				batadv_neigh_ifinfo_free_ref(n_ifinfo);
				batadv_neigh_ifinfo_put(n_ifinfo);
		}
		rcu_read_unlock();
	}
@@ -1964,9 +1964,9 @@ static int batadv_iv_ogm_neigh_cmp(struct batadv_neigh_node *neigh1,

out:
	if (neigh1_ifinfo)
		batadv_neigh_ifinfo_free_ref(neigh1_ifinfo);
		batadv_neigh_ifinfo_put(neigh1_ifinfo);
	if (neigh2_ifinfo)
		batadv_neigh_ifinfo_free_ref(neigh2_ifinfo);
		batadv_neigh_ifinfo_put(neigh2_ifinfo);

	return diff;
}
@@ -2007,9 +2007,9 @@ batadv_iv_ogm_neigh_is_sob(struct batadv_neigh_node *neigh1,

out:
	if (neigh1_ifinfo)
		batadv_neigh_ifinfo_free_ref(neigh1_ifinfo);
		batadv_neigh_ifinfo_put(neigh1_ifinfo);
	if (neigh2_ifinfo)
		batadv_neigh_ifinfo_free_ref(neigh2_ifinfo);
		batadv_neigh_ifinfo_put(neigh2_ifinfo);

	return ret;
}
+31 −32
Original line number Diff line number Diff line
@@ -159,12 +159,11 @@ static void batadv_backbone_gw_release(struct kref *ref)
}

/**
 * batadv_backbone_gw_free_ref - decrement the backbone gw refcounter and
 *  possibly release it
 * batadv_backbone_gw_put - decrement the backbone gw refcounter and possibly
 *  release it
 * @backbone_gw: backbone gateway to be free'd
 */
static void
batadv_backbone_gw_free_ref(struct batadv_bla_backbone_gw *backbone_gw)
static void batadv_backbone_gw_put(struct batadv_bla_backbone_gw *backbone_gw)
{
	kref_put(&backbone_gw->refcount, batadv_backbone_gw_release);
}
@@ -180,16 +179,16 @@ static void batadv_claim_release(struct kref *ref)

	claim = container_of(ref, struct batadv_bla_claim, refcount);

	batadv_backbone_gw_free_ref(claim->backbone_gw);
	batadv_backbone_gw_put(claim->backbone_gw);
	kfree_rcu(claim, rcu);
}

/**
 * batadv_claim_free_ref - decrement the claim refcounter and possibly
 * batadv_claim_put - decrement the claim refcounter and possibly
 *  release it
 * @claim: claim to be free'd
 */
static void batadv_claim_free_ref(struct batadv_bla_claim *claim)
static void batadv_claim_put(struct batadv_bla_claim *claim)
{
	kref_put(&claim->refcount, batadv_claim_release);
}
@@ -305,7 +304,7 @@ batadv_bla_del_backbone_claims(struct batadv_bla_backbone_gw *backbone_gw)
			if (claim->backbone_gw != backbone_gw)
				continue;

			batadv_claim_free_ref(claim);
			batadv_claim_put(claim);
			hlist_del_rcu(&claim->hash_entry);
		}
		spin_unlock_bh(list_lock);
@@ -424,7 +423,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, u8 *mac,
	netif_rx(skb);
out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
}

/**
@@ -486,7 +485,7 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, u8 *orig,
	if (orig_node) {
		batadv_tt_global_del_orig(bat_priv, orig_node, vid,
					  "became a backbone gateway");
		batadv_orig_node_free_ref(orig_node);
		batadv_orig_node_put(orig_node);
	}

	if (own_backbone) {
@@ -524,7 +523,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv,
		return;

	backbone_gw->lasttime = jiffies;
	batadv_backbone_gw_free_ref(backbone_gw);
	batadv_backbone_gw_put(backbone_gw);
}

/**
@@ -573,7 +572,7 @@ static void batadv_bla_answer_request(struct batadv_priv *bat_priv,

	/* finally, send an announcement frame */
	batadv_bla_send_announce(bat_priv, backbone_gw);
	batadv_backbone_gw_free_ref(backbone_gw);
	batadv_backbone_gw_put(backbone_gw);
}

/**
@@ -682,7 +681,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv,
		spin_lock_bh(&claim->backbone_gw->crc_lock);
		claim->backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN);
		spin_unlock_bh(&claim->backbone_gw->crc_lock);
		batadv_backbone_gw_free_ref(claim->backbone_gw);
		batadv_backbone_gw_put(claim->backbone_gw);
	}
	/* set (new) backbone gw */
	kref_get(&backbone_gw->refcount);
@@ -694,7 +693,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv,
	backbone_gw->lasttime = jiffies;

claim_free_ref:
	batadv_claim_free_ref(claim);
	batadv_claim_put(claim);
}

/**
@@ -719,14 +718,14 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv,

	batadv_hash_remove(bat_priv->bla.claim_hash, batadv_compare_claim,
			   batadv_choose_claim, claim);
	batadv_claim_free_ref(claim); /* reference from the hash is gone */
	batadv_claim_put(claim); /* reference from the hash is gone */

	spin_lock_bh(&claim->backbone_gw->crc_lock);
	claim->backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN);
	spin_unlock_bh(&claim->backbone_gw->crc_lock);

	/* don't need the reference from hash_find() anymore */
	batadv_claim_free_ref(claim);
	batadv_claim_put(claim);
}

/**
@@ -783,7 +782,7 @@ static int batadv_handle_announce(struct batadv_priv *bat_priv, u8 *an_addr,
		}
	}

	batadv_backbone_gw_free_ref(backbone_gw);
	batadv_backbone_gw_put(backbone_gw);
	return 1;
}

@@ -854,7 +853,7 @@ static int batadv_handle_unclaim(struct batadv_priv *bat_priv,
		   claim_addr, BATADV_PRINT_VID(vid), backbone_gw->orig);

	batadv_bla_del_claim(bat_priv, claim_addr, vid);
	batadv_backbone_gw_free_ref(backbone_gw);
	batadv_backbone_gw_put(backbone_gw);
	return 1;
}

@@ -891,7 +890,7 @@ static int batadv_handle_claim(struct batadv_priv *bat_priv,

	/* TODO: we could call something like tt_local_del() here. */

	batadv_backbone_gw_free_ref(backbone_gw);
	batadv_backbone_gw_put(backbone_gw);
	return 1;
}

@@ -965,7 +964,7 @@ static int batadv_check_claim_group(struct batadv_priv *bat_priv,
		bla_dst_own->group = bla_dst->group;
	}

	batadv_orig_node_free_ref(orig_node);
	batadv_orig_node_put(orig_node);

	return 2;
}
@@ -1154,7 +1153,7 @@ static void batadv_bla_purge_backbone_gw(struct batadv_priv *bat_priv, int now)
			batadv_bla_del_backbone_claims(backbone_gw);

			hlist_del_rcu(&backbone_gw->hash_entry);
			batadv_backbone_gw_free_ref(backbone_gw);
			batadv_backbone_gw_put(backbone_gw);
		}
		spin_unlock_bh(list_lock);
	}
@@ -1282,7 +1281,7 @@ void batadv_bla_status_update(struct net_device *net_dev)
	 * so just call that one.
	 */
	batadv_bla_update_orig_address(bat_priv, primary_if, primary_if);
	batadv_hardif_free_ref(primary_if);
	batadv_hardif_put(primary_if);
}

/**
@@ -1356,7 +1355,7 @@ static void batadv_bla_periodic_work(struct work_struct *work)
	}
out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);

	queue_delayed_work(batadv_event_workqueue, &bat_priv->bla.work,
			   msecs_to_jiffies(BATADV_BLA_PERIOD_LENGTH));
@@ -1395,7 +1394,7 @@ int batadv_bla_init(struct batadv_priv *bat_priv)
	if (primary_if) {
		crc = crc16(0, primary_if->net_dev->dev_addr, ETH_ALEN);
		bat_priv->bla.claim_dest.group = htons(crc);
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	} else {
		bat_priv->bla.claim_dest.group = 0; /* will be set later */
	}
@@ -1571,7 +1570,7 @@ int batadv_bla_is_backbone_gw(struct sk_buff *skb,
	if (!backbone_gw)
		return 0;

	batadv_backbone_gw_free_ref(backbone_gw);
	batadv_backbone_gw_put(backbone_gw);
	return 1;
}

@@ -1599,7 +1598,7 @@ void batadv_bla_free(struct batadv_priv *bat_priv)
		bat_priv->bla.backbone_hash = NULL;
	}
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
}

/**
@@ -1692,9 +1691,9 @@ int batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb,

out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	if (claim)
		batadv_claim_free_ref(claim);
		batadv_claim_put(claim);
	return ret;
}

@@ -1781,9 +1780,9 @@ int batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb,
	ret = 1;
out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	if (claim)
		batadv_claim_free_ref(claim);
		batadv_claim_put(claim);
	return ret;
}

@@ -1839,7 +1838,7 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset)
	}
out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	return 0;
}

@@ -1904,6 +1903,6 @@ int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset)
	}
out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	return 0;
}
+12 −12
Original line number Diff line number Diff line
@@ -77,11 +77,11 @@ static void batadv_dat_entry_release(struct kref *ref)
}

/**
 * batadv_dat_entry_free_ref - decrement the dat_entry refcounter and possibly
 * batadv_dat_entry_put - decrement the dat_entry refcounter and possibly
 *  release it
 * @dat_entry: dat_entry to be free'd
 */
static void batadv_dat_entry_free_ref(struct batadv_dat_entry *dat_entry)
static void batadv_dat_entry_put(struct batadv_dat_entry *dat_entry)
{
	kref_put(&dat_entry->refcount, batadv_dat_entry_release);
}
@@ -135,7 +135,7 @@ static void __batadv_dat_purge(struct batadv_priv *bat_priv,
				continue;

			hlist_del_rcu(&dat_entry->hash_entry);
			batadv_dat_entry_free_ref(dat_entry);
			batadv_dat_entry_put(dat_entry);
		}
		spin_unlock_bh(list_lock);
	}
@@ -349,7 +349,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,

	if (unlikely(hash_added != 0)) {
		/* remove the reference for the hash */
		batadv_dat_entry_free_ref(dat_entry);
		batadv_dat_entry_put(dat_entry);
		goto out;
	}

@@ -358,7 +358,7 @@ static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip,

out:
	if (dat_entry)
		batadv_dat_entry_free_ref(dat_entry);
		batadv_dat_entry_put(dat_entry);
}

#ifdef CONFIG_BATMAN_ADV_DEBUG
@@ -547,7 +547,7 @@ static void batadv_choose_next_candidate(struct batadv_priv *bat_priv,

			max = tmp_max;
			if (max_orig_node)
				batadv_orig_node_free_ref(max_orig_node);
				batadv_orig_node_put(max_orig_node);
			max_orig_node = orig_node;
		}
		rcu_read_unlock();
@@ -674,9 +674,9 @@ static bool batadv_dat_send_data(struct batadv_priv *bat_priv,
			ret = true;
		}
free_neigh:
		batadv_neigh_node_free_ref(neigh_node);
		batadv_neigh_node_put(neigh_node);
free_orig:
		batadv_orig_node_free_ref(cand[i].orig_node);
		batadv_orig_node_put(cand[i].orig_node);
	}

out:
@@ -840,7 +840,7 @@ int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset)

out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	return 0;
}

@@ -1029,7 +1029,7 @@ bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
	}
out:
	if (dat_entry)
		batadv_dat_entry_free_ref(dat_entry);
		batadv_dat_entry_put(dat_entry);
	return ret;
}

@@ -1109,7 +1109,7 @@ bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
	}
out:
	if (dat_entry)
		batadv_dat_entry_free_ref(dat_entry);
		batadv_dat_entry_put(dat_entry);
	if (ret)
		kfree_skb(skb);
	return ret;
@@ -1262,6 +1262,6 @@ bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv,

out:
	if (dat_entry)
		batadv_dat_entry_free_ref(dat_entry);
		batadv_dat_entry_put(dat_entry);
	return ret;
}
+3 −3
Original line number Diff line number Diff line
@@ -385,9 +385,9 @@ bool batadv_frag_skb_fwd(struct sk_buff *skb,

out:
	if (orig_node_dst)
		batadv_orig_node_free_ref(orig_node_dst);
		batadv_orig_node_put(orig_node_dst);
	if (neigh_node)
		batadv_neigh_node_free_ref(neigh_node);
		batadv_neigh_node_put(neigh_node);
	return ret;
}

@@ -512,7 +512,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb,

out_err:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);

	return ret;
}
+36 −37
Original line number Diff line number Diff line
@@ -71,16 +71,15 @@ static void batadv_gw_node_release(struct kref *ref)

	gw_node = container_of(ref, struct batadv_gw_node, refcount);

	batadv_orig_node_free_ref(gw_node->orig_node);
	batadv_orig_node_put(gw_node->orig_node);
	kfree_rcu(gw_node, rcu);
}

/**
 * batadv_gw_node_free_ref - decrement the gw_node refcounter and possibly
 *  release it
 * batadv_gw_node_put - decrement the gw_node refcounter and possibly release it
 * @gw_node: gateway node to free
 */
static void batadv_gw_node_free_ref(struct batadv_gw_node *gw_node)
static void batadv_gw_node_put(struct batadv_gw_node *gw_node)
{
	kref_put(&gw_node->refcount, batadv_gw_node_release);
}
@@ -125,7 +124,7 @@ batadv_gw_get_selected_orig(struct batadv_priv *bat_priv)
	rcu_read_unlock();
out:
	if (gw_node)
		batadv_gw_node_free_ref(gw_node);
		batadv_gw_node_put(gw_node);
	return orig_node;
}

@@ -143,7 +142,7 @@ static void batadv_gw_select(struct batadv_priv *bat_priv,
	rcu_assign_pointer(bat_priv->gw.curr_gw, new_gw_node);

	if (curr_gw_node)
		batadv_gw_node_free_ref(curr_gw_node);
		batadv_gw_node_put(curr_gw_node);

	spin_unlock_bh(&bat_priv->gw.list_lock);
}
@@ -204,7 +203,7 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv)
			    ((tmp_gw_factor == max_gw_factor) &&
			     (tq_avg > max_tq))) {
				if (curr_gw)
					batadv_gw_node_free_ref(curr_gw);
					batadv_gw_node_put(curr_gw);
				curr_gw = gw_node;
				kref_get(&curr_gw->refcount);
			}
@@ -219,7 +218,7 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv)
			  */
			if (tq_avg > max_tq) {
				if (curr_gw)
					batadv_gw_node_free_ref(curr_gw);
					batadv_gw_node_put(curr_gw);
				curr_gw = gw_node;
				kref_get(&curr_gw->refcount);
			}
@@ -232,12 +231,12 @@ batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv)
		if (tmp_gw_factor > max_gw_factor)
			max_gw_factor = tmp_gw_factor;

		batadv_gw_node_free_ref(gw_node);
		batadv_gw_node_put(gw_node);

next:
		batadv_neigh_node_free_ref(router);
		batadv_neigh_node_put(router);
		if (router_ifinfo)
			batadv_neigh_ifinfo_free_ref(router_ifinfo);
			batadv_neigh_ifinfo_put(router_ifinfo);
	}
	rcu_read_unlock();

@@ -273,7 +272,7 @@ void batadv_gw_check_client_stop(struct batadv_priv *bat_priv)
	 */
	batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_DEL, NULL);

	batadv_gw_node_free_ref(curr_gw);
	batadv_gw_node_put(curr_gw);
}

void batadv_gw_election(struct batadv_priv *bat_priv)
@@ -348,13 +347,13 @@ void batadv_gw_election(struct batadv_priv *bat_priv)

out:
	if (curr_gw)
		batadv_gw_node_free_ref(curr_gw);
		batadv_gw_node_put(curr_gw);
	if (next_gw)
		batadv_gw_node_free_ref(next_gw);
		batadv_gw_node_put(next_gw);
	if (router)
		batadv_neigh_node_free_ref(router);
		batadv_neigh_node_put(router);
	if (router_ifinfo)
		batadv_neigh_ifinfo_free_ref(router_ifinfo);
		batadv_neigh_ifinfo_put(router_ifinfo);
}

void batadv_gw_check_election(struct batadv_priv *bat_priv,
@@ -415,15 +414,15 @@ void batadv_gw_check_election(struct batadv_priv *bat_priv,
	batadv_gw_reselect(bat_priv);
out:
	if (curr_gw_orig)
		batadv_orig_node_free_ref(curr_gw_orig);
		batadv_orig_node_put(curr_gw_orig);
	if (router_gw)
		batadv_neigh_node_free_ref(router_gw);
		batadv_neigh_node_put(router_gw);
	if (router_orig)
		batadv_neigh_node_free_ref(router_orig);
		batadv_neigh_node_put(router_orig);
	if (router_gw_tq)
		batadv_neigh_ifinfo_free_ref(router_gw_tq);
		batadv_neigh_ifinfo_put(router_gw_tq);
	if (router_orig_tq)
		batadv_neigh_ifinfo_free_ref(router_orig_tq);
		batadv_neigh_ifinfo_put(router_orig_tq);
}

/**
@@ -446,7 +445,7 @@ static void batadv_gw_node_add(struct batadv_priv *bat_priv,

	gw_node = kzalloc(sizeof(*gw_node), GFP_ATOMIC);
	if (!gw_node) {
		batadv_orig_node_free_ref(orig_node);
		batadv_orig_node_put(orig_node);
		return;
	}

@@ -547,7 +546,7 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,
		spin_lock_bh(&bat_priv->gw.list_lock);
		if (!hlist_unhashed(&gw_node->list)) {
			hlist_del_init_rcu(&gw_node->list);
			batadv_gw_node_free_ref(gw_node);
			batadv_gw_node_put(gw_node);
		}
		spin_unlock_bh(&bat_priv->gw.list_lock);

@@ -556,12 +555,12 @@ void batadv_gw_node_update(struct batadv_priv *bat_priv,
			batadv_gw_reselect(bat_priv);

		if (curr_gw)
			batadv_gw_node_free_ref(curr_gw);
			batadv_gw_node_put(curr_gw);
	}

out:
	if (gw_node)
		batadv_gw_node_free_ref(gw_node);
		batadv_gw_node_put(gw_node);
}

void batadv_gw_node_delete(struct batadv_priv *bat_priv,
@@ -584,7 +583,7 @@ void batadv_gw_node_free(struct batadv_priv *bat_priv)
	hlist_for_each_entry_safe(gw_node, node_tmp,
				  &bat_priv->gw.list, list) {
		hlist_del_init_rcu(&gw_node->list);
		batadv_gw_node_free_ref(gw_node);
		batadv_gw_node_put(gw_node);
	}
	spin_unlock_bh(&bat_priv->gw.list_lock);
}
@@ -621,12 +620,12 @@ static int batadv_write_buffer_text(struct batadv_priv *bat_priv,
	ret = seq_has_overflowed(seq) ? -1 : 0;

	if (curr_gw)
		batadv_gw_node_free_ref(curr_gw);
		batadv_gw_node_put(curr_gw);
out:
	if (router_ifinfo)
		batadv_neigh_ifinfo_free_ref(router_ifinfo);
		batadv_neigh_ifinfo_put(router_ifinfo);
	if (router)
		batadv_neigh_node_free_ref(router);
		batadv_neigh_node_put(router);
	return ret;
}

@@ -663,7 +662,7 @@ int batadv_gw_client_seq_print_text(struct seq_file *seq, void *offset)

out:
	if (primary_if)
		batadv_hardif_free_ref(primary_if);
		batadv_hardif_put(primary_if);
	return 0;
}

@@ -857,7 +856,7 @@ bool batadv_gw_out_of_range(struct batadv_priv *bat_priv,
			goto out;

		curr_tq_avg = curr_ifinfo->bat_iv.tq_avg;
		batadv_neigh_ifinfo_free_ref(curr_ifinfo);
		batadv_neigh_ifinfo_put(curr_ifinfo);

		break;
	case BATADV_GW_MODE_OFF:
@@ -875,18 +874,18 @@ bool batadv_gw_out_of_range(struct batadv_priv *bat_priv,

	if ((curr_tq_avg - old_ifinfo->bat_iv.tq_avg) > BATADV_GW_THRESHOLD)
		out_of_range = true;
	batadv_neigh_ifinfo_free_ref(old_ifinfo);
	batadv_neigh_ifinfo_put(old_ifinfo);

out:
	if (orig_dst_node)
		batadv_orig_node_free_ref(orig_dst_node);
		batadv_orig_node_put(orig_dst_node);
	if (curr_gw)
		batadv_gw_node_free_ref(curr_gw);
		batadv_gw_node_put(curr_gw);
	if (gw_node)
		batadv_gw_node_free_ref(gw_node);
		batadv_gw_node_put(gw_node);
	if (neigh_old)
		batadv_neigh_node_free_ref(neigh_old);
		batadv_neigh_node_put(neigh_old);
	if (neigh_curr)
		batadv_neigh_node_free_ref(neigh_curr);
		batadv_neigh_node_put(neigh_curr);
	return out_of_range;
}
Loading