Hi all, Today's linux-next merge of the net-next tree got conflicts in net/batman-adv/translation-table.c between commits 03fc3070457d ("batman-adv: in case of roaming mark the client with TT_CLIENT_ROAM") and 797399b415b7 ("batman-adv: delete global entry in case of roaming") from the net tree and commit 48100bac89a6 ("batman-adv: create a common substructure for tt_global/local_entry") from the net-next tree. I fixed it up (I think - see below) and can carry the fix as necessary. -- Cheers, Stephen Rothwell sfr@canb.auug.org.au diff --cc net/batman-adv/translation-table.c index 5f09a57,cc87acf..0000000 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c @@@ -245,12 -242,10 +242,12 @@@ void tt_local_add(struct net_device *so if (tt_global_entry) { /* This node is probably going to update its tt table */ tt_global_entry->orig_node->tt_poss_change = true; - /* The global entry has to be marked as PENDING and has to be + /* The global entry has to be marked as ROAMING and has to be * kept for consistency purpose */ - tt_global_entry->flags |= TT_CLIENT_ROAM; - tt_global_entry->common.flags |= TT_CLIENT_PENDING; ++ tt_global_entry->common.flags |= TT_CLIENT_ROAM; + tt_global_entry->roam_at = jiffies; + - send_roam_adv(bat_priv, tt_global_entry->addr, + send_roam_adv(bat_priv, tt_global_entry->common.addr, tt_global_entry->orig_node); } out: @@@ -704,21 -668,9 +671,21 @@@ void tt_global_del(struct bat_priv *bat if (tt_global_entry->orig_node == orig_node) { if (roaming) { - tt_global_entry->common.flags |= TT_CLIENT_ROAM; - tt_global_entry->roam_at = jiffies; - goto out; + /* if we are deleting a global entry due to a roam + * event, there are two possibilities: + * 1) the client roamed from node A to node B => we mark + * it with TT_CLIENT_ROAM, we start a timer and we + * wait for node B to claim it. In case of timeout + * the entry is purged. + * 2) the client roamed to us => we can directly delete + * the global entry, since it is useless now. */ + tt_local_entry = tt_local_hash_find(bat_priv, - tt_global_entry->addr); ++ tt_global_entry->common.addr); + if (!tt_local_entry) { - tt_global_entry->flags |= TT_CLIENT_ROAM; ++ tt_global_entry->common.flags |= TT_CLIENT_ROAM; + tt_global_entry->roam_at = jiffies; + goto out; + } } _tt_global_del(bat_priv, tt_global_entry, message); }