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

Commit a04ccd59 authored by Martin Hundebøll's avatar Martin Hundebøll Committed by Marek Lindner
Browse files

batman-adv: Move is_out_of_time() to main.h for general use



Both translation tables and network coding use timeouts to do house
keeping, so we might as well share the function used to compare a
timestamp+timeout with current time.

For readability and simplicity, the function is renamed to
has_timed_out() and uses time_is_before_jiffies() instead of
time_after().

Signed-off-by: default avatarMartin Hundebøll <martin@hundeboll.net>
Signed-off-by: default avatarMarek Lindner <lindner_marek@yahoo.de>
parent c51f9c09
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -202,6 +202,17 @@ static inline int compare_eth(const void *data1, const void *data2)
	return (memcmp(data1, data2, ETH_ALEN) == 0 ? 1 : 0);
}

/**
 * has_timed_out - compares current time (jiffies) and timestamp + timeout
 * @timestamp:		base value to compare with (in jiffies)
 * @timeout:		added to base value before comparing (in milliseconds)
 *
 * Returns true if current time is after timestamp + timeout
 */
static inline bool has_timed_out(unsigned long timestamp, unsigned int timeout)
{
	return time_is_before_jiffies(timestamp + msecs_to_jiffies(timeout));
}

#define atomic_dec_not_zero(v)	atomic_add_unless((v), -1, 0)

+12 −20
Original line number Diff line number Diff line
@@ -108,14 +108,6 @@ static struct tt_global_entry *tt_global_hash_find(struct bat_priv *bat_priv,

}

static bool is_out_of_time(unsigned long starting_time, unsigned long timeout)
{
	unsigned long deadline;
	deadline = starting_time + msecs_to_jiffies(timeout);

	return time_after(jiffies, deadline);
}

static void tt_local_entry_free_ref(struct tt_local_entry *tt_local_entry)
{
	if (atomic_dec_and_test(&tt_local_entry->common.refcount))
@@ -420,7 +412,7 @@ static void tt_local_purge(struct bat_priv *bat_priv)
			if (tt_local_entry->common.flags & TT_CLIENT_PENDING)
				continue;

			if (!is_out_of_time(tt_local_entry->last_seen,
			if (!has_timed_out(tt_local_entry->last_seen,
					   TT_LOCAL_TIMEOUT * 1000))
				continue;

@@ -758,7 +750,7 @@ static void tt_global_roam_purge(struct bat_priv *bat_priv)
						       common);
			if (!(tt_global_entry->common.flags & TT_CLIENT_ROAM))
				continue;
			if (!is_out_of_time(tt_global_entry->roam_at,
			if (!has_timed_out(tt_global_entry->roam_at,
					   TT_CLIENT_ROAM_TIMEOUT * 1000))
				continue;

@@ -978,7 +970,7 @@ static void tt_req_purge(struct bat_priv *bat_priv)

	spin_lock_bh(&bat_priv->tt_req_list_lock);
	list_for_each_entry_safe(node, safe, &bat_priv->tt_req_list, list) {
		if (is_out_of_time(node->issued_at,
		if (has_timed_out(node->issued_at,
				  TT_REQUEST_TIMEOUT * 1000)) {
			list_del(&node->list);
			kfree(node);
@@ -997,7 +989,7 @@ static struct tt_req_node *new_tt_req_node(struct bat_priv *bat_priv,
	spin_lock_bh(&bat_priv->tt_req_list_lock);
	list_for_each_entry(tt_req_node_tmp, &bat_priv->tt_req_list, list) {
		if (compare_eth(tt_req_node_tmp, orig_node) &&
		    !is_out_of_time(tt_req_node_tmp->issued_at,
		    !has_timed_out(tt_req_node_tmp->issued_at,
				   TT_REQUEST_TIMEOUT * 1000))
			goto unlock;
	}
@@ -1591,7 +1583,7 @@ static void tt_roam_purge(struct bat_priv *bat_priv)

	spin_lock_bh(&bat_priv->tt_roam_list_lock);
	list_for_each_entry_safe(node, safe, &bat_priv->tt_roam_list, list) {
		if (!is_out_of_time(node->first_time,
		if (!has_timed_out(node->first_time,
				   ROAMING_MAX_TIME * 1000))
			continue;

@@ -1619,7 +1611,7 @@ static bool tt_check_roam_count(struct bat_priv *bat_priv,
		if (!compare_eth(tt_roam_node->addr, client))
			continue;

		if (is_out_of_time(tt_roam_node->first_time,
		if (has_timed_out(tt_roam_node->first_time,
				  ROAMING_MAX_TIME * 1000))
			continue;