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 --]
next prev parent 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).