b.a.t.m.a.n.lists.open-mesh.org archive mirror
 help / color / mirror / Atom feed
From: Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>
To: The list for a Better Approach To Mobile Ad-hoc Networking
	<b.a.t.m.a.n@lists.open-mesh.org>
Subject: Re: [B.A.T.M.A.N.] [PATCH] batman-adv: generalise tt_local_reset_flags()
Date: Mon, 31 Oct 2011 01:42:01 +0100	[thread overview]
Message-ID: <20111031004201.GH10726@pandem0nium> (raw)
In-Reply-To: <1320001741-18351-1-git-send-email-ordex@autistici.org>

[-- Attachment #1: Type: text/plain, Size: 3548 bytes --]

Hey Antonio,

I don't quite understand what this patch is good for - it generalises the function,
but does not use the function at another point. So what it is good for (next to
add more complexity to batman ;] ).

Furthermore it counts the changes and adds it to num_local_tt, is there a bug fix
hidden in this patch somewhere? :)

Cheers,
	Simon

On Sun, Oct 30, 2011 at 08:09:01PM +0100, Antonio Quartulli wrote:
> The tt_local_reset_flags() is actually used for one use case only. It is not
> generalised enough to be used indifferent situations. This patch make it general
> enough in order to let other code use it whenever a flag flip is requested over
> the whole hash table (passed as parameter).
> 
> Signed-off-by: Antonio Quartulli <ordex@autistici.org>
> ---
> 
> This patch depends on:
> 
> batman-adv: create a common substructure for tt_global/local_entry
> 
> 
>  translation-table.c |   31 ++++++++++++++++++++-----------
>  1 files changed, 20 insertions(+), 11 deletions(-)
> 
> diff --git a/translation-table.c b/translation-table.c
> index 76134bc..5b60aba 100644
> --- a/translation-table.c
> +++ b/translation-table.c
> @@ -1695,19 +1695,20 @@ void tt_free(struct bat_priv *bat_priv)
>  	kfree(bat_priv->tt_buff);
>  }
>  
> -/* This function will reset the specified flags from all the entries in
> - * the given hash table and will increment num_local_tt for each involved
> - * entry */
> -static void tt_local_reset_flags(struct bat_priv *bat_priv, uint16_t flags)
> +/* This function will flip to new_value (if not already) the specified flags for
> + * all the entries in the given hash table and returns the number of modified
> + * entries */
> +static uint16_t tt_flip_flags(struct hashtable_t *hash, uint16_t flags,
> +			     uint8_t new_value)
>  {
>  	uint32_t i;
> -	struct hashtable_t *hash = bat_priv->tt_local_hash;
> +	uint16_t changed_num = 0;
>  	struct hlist_head *head;
>  	struct hlist_node *node;
>  	struct tt_common_entry *tt_common_entry;
>  
>  	if (!hash)
> -		return;
> +		goto out;
>  
>  	for (i = 0; i < hash->size; i++) {
>  		head = &hash->table[i];
> @@ -1715,14 +1716,18 @@ static void tt_local_reset_flags(struct bat_priv *bat_priv, uint16_t flags)
>  		rcu_read_lock();
>  		hlist_for_each_entry_rcu(tt_common_entry, node,
>  					 head, hash_entry) {
> -			if (!(tt_common_entry->flags & flags))
> +			if ((tt_common_entry->flags & flags) != new_value)
>  				continue;
> -			tt_common_entry->flags &= ~flags;
> -			atomic_inc(&bat_priv->num_local_tt);
> +			/* depending on 'new_value', enable or disable the flags
> +			 * pointed by 'flags' */
> +			tt_common_entry->flags &=
> +				(~flags | (new_value ? flags : NO_FLAGS));
> +			changed_num++;
>  		}
>  		rcu_read_unlock();
>  	}
> -
> +out:
> +	return changed_num;
>  }
>  
>  /* Purge out all the tt local entries marked with TT_CLIENT_PENDING */
> @@ -1766,7 +1771,11 @@ static void tt_local_purge_pending_clients(struct bat_priv *bat_priv)
>  
>  void tt_commit_changes(struct bat_priv *bat_priv)
>  {
> -	tt_local_reset_flags(bat_priv, TT_CLIENT_NEW);
> +	uint16_t changed_num = tt_flip_flags(bat_priv->tt_local_hash,
> +					    TT_CLIENT_NEW, 0);
> +	/* all the reset entries have now to be effectively counted as local
> +	 * entries */
> +	atomic_add(changed_num, &bat_priv->num_local_tt);
>  	tt_local_purge_pending_clients(bat_priv);
>  
>  	/* Increment the TTVN only once per OGM interval */
> -- 
> 1.7.3.4
> 
> 

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2011-10-31  0:42 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-30 19:09 [B.A.T.M.A.N.] [PATCH] batman-adv: generalise tt_local_reset_flags() Antonio Quartulli
2011-10-31  0:42 ` Simon Wunderlich [this message]
2011-11-01 13:43   ` Antonio Quartulli
2011-11-04 15:00     ` Simon Wunderlich
2011-11-07 15:47 ` [B.A.T.M.A.N.] [PATCHv2] " Antonio Quartulli
2011-11-08 17:02   ` Marek Lindner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111031004201.GH10726@pandem0nium \
    --to=simon.wunderlich@s2003.tu-chemnitz.de \
    --cc=b.a.t.m.a.n@lists.open-mesh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).