All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.