Signed-off-by: Sven Eckelmann sven@narfation.org --- ordex: This one is important for you. Please check whether patches in batman-adv/next touch these code parts. They may be the reason that these problems were introduced and must be fixed. Therefore, I would suggest to put this patch directly (after reviewing of course) in next.
bat_iv_ogm.c | 2 +- compat.h | 4 ++-- debugfs.c | 18 +++++++++++------- gateway_client.c | 4 ++-- hard-interface.c | 10 +++++----- originator.c | 9 +++++---- routing.c | 3 +-- sysfs.c | 2 +- unicast.c | 5 +++-- 9 files changed, 31 insertions(+), 26 deletions(-)
diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c index 1dfe0e4..e877af8 100644 --- a/bat_iv_ogm.c +++ b/bat_iv_ogm.c @@ -145,7 +145,7 @@ static uint8_t batadv_hop_penalty(uint8_t tq,
/* is there another aggregated packet here? */ static int batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len, - int tt_num_changes) + int tt_num_changes) { int next_buff_pos = 0;
diff --git a/compat.h b/compat.h index d58ba17..13253dd 100644 --- a/compat.h +++ b/compat.h @@ -72,8 +72,8 @@
#define __hlist_for_each_rcu(pos, head) \ for (pos = rcu_dereference(hlist_first_rcu(head)); \ - pos && ({ prefetch(pos->next); 1; }); \ - pos = rcu_dereference(hlist_next_rcu(pos))) + pos && ({ prefetch(pos->next); 1; }); \ + pos = rcu_dereference(hlist_next_rcu(pos)))
#define rcu_dereference_protected(p, c) (p)
diff --git a/debugfs.c b/debugfs.c index e45cf0e..34fbb16 100644 --- a/debugfs.c +++ b/debugfs.c @@ -111,6 +111,11 @@ static int batadv_log_release(struct inode *inode, struct file *file) return 0; }
+static int batadv_log_empty(struct batadv_debug_log *debug_log) +{ + return !(debug_log->log_start - debug_log->log_end); +} + static ssize_t batadv_log_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { @@ -120,8 +125,7 @@ static ssize_t batadv_log_read(struct file *file, char __user *buf, char *char_addr; char c;
- if ((file->f_flags & O_NONBLOCK) && - !(debug_log->log_end - debug_log->log_start)) + if ((file->f_flags & O_NONBLOCK) && batadv_log_empty(debug_log)) return -EAGAIN;
if (!buf) @@ -134,7 +138,7 @@ static ssize_t batadv_log_read(struct file *file, char __user *buf, return -EFAULT;
error = wait_event_interruptible(debug_log->queue_wait, - (debug_log->log_start - debug_log->log_end)); + (!batadv_log_empty(debug_log)));
if (error) return error; @@ -175,7 +179,7 @@ static unsigned int batadv_log_poll(struct file *file, poll_table *wait)
poll_wait(file, &debug_log->queue_wait, wait);
- if (debug_log->log_end - debug_log->log_start) + if (!batadv_log_empty(debug_log)) return POLLIN | POLLRDNORM;
return 0; @@ -370,9 +374,9 @@ int batadv_debugfs_add_meshif(struct net_device *dev)
for (bat_debug = batadv_mesh_debuginfos; *bat_debug; ++bat_debug) { file = debugfs_create_file(((*bat_debug)->attr).name, - S_IFREG | ((*bat_debug)->attr).mode, - bat_priv->debug_dir, - dev, &(*bat_debug)->fops); + S_IFREG | ((*bat_debug)->attr).mode, + bat_priv->debug_dir, + dev, &(*bat_debug)->fops); if (!file) { batadv_err(dev, "Can't add debugfs file: %s/%s\n", dev->name, ((*bat_debug)->attr).name); diff --git a/gateway_client.c b/gateway_client.c index 6fe5cc8..b421cc4 100644 --- a/gateway_client.c +++ b/gateway_client.c @@ -228,8 +228,8 @@ void batadv_gw_election(struct batadv_priv *bat_priv) } else if ((!curr_gw) && (next_gw)) { batadv_dbg(BATADV_DBG_BATMAN, bat_priv, "Adding route to gateway %pM (gw_flags: %i, tq: %i)\n", - next_gw->orig_node->orig, - next_gw->orig_node->gw_flags, router->tq_avg); + next_gw->orig_node->orig, + next_gw->orig_node->gw_flags, router->tq_avg); batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_ADD, gw_addr); } else { diff --git a/hard-interface.c b/hard-interface.c index 14e17ea..282bf6e 100644 --- a/hard-interface.c +++ b/hard-interface.c @@ -324,15 +324,15 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, batadv_info(hard_iface->soft_iface, "Adding interface: %s\n", hard_iface->net_dev->name);
- if (atomic_read(&bat_priv->fragmentation) && hard_iface->net_dev->mtu < - ETH_DATA_LEN + BATADV_HEADER_LEN) + if (atomic_read(&bat_priv->fragmentation) && + hard_iface->net_dev->mtu < ETH_DATA_LEN + BATADV_HEADER_LEN) batadv_info(hard_iface->soft_iface, "The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to %zi would solve the problem.\n", hard_iface->net_dev->name, hard_iface->net_dev->mtu, ETH_DATA_LEN + BATADV_HEADER_LEN);
- if (!atomic_read(&bat_priv->fragmentation) && hard_iface->net_dev->mtu < - ETH_DATA_LEN + BATADV_HEADER_LEN) + if (!atomic_read(&bat_priv->fragmentation) && + hard_iface->net_dev->mtu < ETH_DATA_LEN + BATADV_HEADER_LEN) batadv_info(hard_iface->soft_iface, "The MTU of interface %s is too small (%i) to handle the transport of batman-adv packets. If you experience problems getting traffic through try increasing the MTU to %zi.\n", hard_iface->net_dev->name, hard_iface->net_dev->mtu, @@ -486,7 +486,7 @@ void batadv_hardif_remove_interfaces(void) }
static int batadv_hard_if_event(struct notifier_block *this, - unsigned long event, void *ptr) + unsigned long event, void *ptr) { struct net_device *net_dev = ptr; struct batadv_hard_iface *hard_iface; diff --git a/originator.c b/originator.c index fc1ce26..ac9bdf8 100644 --- a/originator.c +++ b/originator.c @@ -413,6 +413,7 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset) int batman_count = 0; int last_seen_secs; int last_seen_msecs; + unsigned long last_seen_jiffies; uint32_t i; int ret = 0;
@@ -451,10 +452,10 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset) if (neigh_node->tq_avg == 0) goto next;
- last_seen_secs = jiffies_to_msecs(jiffies - - orig_node->last_seen) / 1000; - last_seen_msecs = jiffies_to_msecs(jiffies - - orig_node->last_seen) % 1000; + last_seen_jiffies = jiffies - orig_node->last_seen; + last_seen_msecs = jiffies_to_msecs(last_seen_jiffies); + last_seen_secs = last_seen_msecs / 1000; + last_seen_msecs = last_seen_msecs % 1000;
seq_printf(seq, "%pM %4i.%03is (%3i) %pM [%10s]:", orig_node->orig, last_seen_secs, diff --git a/routing.c b/routing.c index b79e42e..bc2b88b 100644 --- a/routing.c +++ b/routing.c @@ -969,8 +969,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, ETH_HLEN) < 0) return 0;
- ethhdr = (struct ethhdr *)(skb->data + - sizeof(struct batadv_unicast_packet)); + ethhdr = (struct ethhdr *)(skb->data + sizeof(*unicast_packet));
/* we don't have an updated route for this client, so we should * not try to reroute the packet!! diff --git a/sysfs.c b/sysfs.c index 6d519ee..66518c7 100644 --- a/sysfs.c +++ b/sysfs.c @@ -119,7 +119,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \ static BATADV_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func)\ static BATADV_ATTR_SIF_SHOW_UINT(_name) \ static BATADV_ATTR(_name, _mode, batadv_show_##_name, \ - batadv_store_##_name) + batadv_store_##_name)
#define BATADV_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func) \ diff --git a/unicast.c b/unicast.c index c42b81d..0016464 100644 --- a/unicast.c +++ b/unicast.c @@ -296,6 +296,7 @@ int batadv_unicast_send_skb(struct sk_buff *skb, struct batadv_priv *bat_priv) struct batadv_neigh_node *neigh_node; int data_len = skb->len; int ret = 1; + unsigned int dev_mtu;
/* get routing information */ if (is_multicast_ether_addr(ethhdr->h_dest)) { @@ -344,9 +345,9 @@ find_router: if (batadv_tt_global_client_is_roaming(bat_priv, ethhdr->h_dest)) unicast_packet->ttvn = unicast_packet->ttvn - 1;
+ dev_mtu = neigh_node->if_incoming->net_dev->mtu; if (atomic_read(&bat_priv->fragmentation) && - data_len + sizeof(*unicast_packet) > - neigh_node->if_incoming->net_dev->mtu) { + data_len + sizeof(*unicast_packet) > dev_mtu) { /* send frag skb decreases ttl */ unicast_packet->header.ttl++; ret = batadv_frag_send_skb(skb, bat_priv,
On Tue, Jun 19, 2012 at 08:26:30PM +0200, Sven Eckelmann wrote:
Signed-off-by: Sven Eckelmann sven@narfation.org
ordex: This one is important for you. Please check whether patches in batman-adv/next touch these code parts. They may be the reason that these problems were introduced and must be fixed. Therefore, I would suggest to put this patch directly (after reviewing of course) in next.
yes, these issues were introduced by renaming patches.. Therefore this patch should be committed into next.
Thanks
On Tuesday, June 19, 2012 20:26:30 Sven Eckelmann wrote:
Signed-off-by: Sven Eckelmann sven@narfation.org
ordex: This one is important for you. Please check whether patches in batman-adv/next touch these code parts. They may be the reason that these problems were introduced and must be fixed. Therefore, I would suggest to put this patch directly (after reviewing of course) in next.
bat_iv_ogm.c | 2 +- compat.h | 4 ++-- debugfs.c | 18 +++++++++++------- gateway_client.c | 4 ++-- hard-interface.c | 10 +++++----- originator.c | 9 +++++---- routing.c | 3 +-- sysfs.c | 2 +- unicast.c | 5 +++-- 9 files changed, 31 insertions(+), 26 deletions(-)
Applied in revision f80413a.
Thanks, Marek
On Tuesday 19 June 2012 20:26:30 Sven Eckelmann wrote:
Signed-off-by: Sven Eckelmann sven@narfation.org
ordex: This one is important for you. Please check whether patches in batman-adv/next touch these code parts. They may be the reason that these problems were introduced and must be fixed. Therefore, I would suggest to put this patch directly (after reviewing of course) in next.
bat_iv_ogm.c | 2 +- compat.h | 4 ++-- debugfs.c | 18 +++++++++++------- gateway_client.c | 4 ++-- hard-interface.c | 10 +++++----- originator.c | 9 +++++---- routing.c | 3 +-- sysfs.c | 2 +- unicast.c | 5 +++-- 9 files changed, 31 insertions(+), 26 deletions(-)
diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c index 1dfe0e4..e877af8 100644 --- a/bat_iv_ogm.c +++ b/bat_iv_ogm.c @@ -145,7 +145,7 @@ static uint8_t batadv_hop_penalty(uint8_t tq,
/* is there another aggregated packet here? */ static int batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
int tt_num_changes)
int tt_num_changes)
{ int next_buff_pos = 0;
This is a regression in 126772e16e6f337a1ae626fba5cdaf8dfd12f46b (rename patches)
diff --git a/compat.h b/compat.h index d58ba17..13253dd 100644 --- a/compat.h +++ b/compat.h @@ -72,8 +72,8 @@
#define __hlist_for_each_rcu(pos, head) \ for (pos = rcu_dereference(hlist_first_rcu(head)); \
- pos && ({ prefetch(pos->next); 1; }); \
- pos = rcu_dereference(hlist_next_rcu(pos)))
pos && ({ prefetch(pos->next); 1; }); \
pos = rcu_dereference(hlist_next_rcu(pos)))
#define rcu_dereference_protected(p, c) (p)
There since 4c4236064501e85915087f00a370df8d9f43028d (there since ages)
diff --git a/debugfs.c b/debugfs.c index e45cf0e..34fbb16 100644 --- a/debugfs.c +++ b/debugfs.c @@ -111,6 +111,11 @@ static int batadv_log_release(struct inode *inode, struct file *file) return 0; }
+static int batadv_log_empty(struct batadv_debug_log *debug_log) +{
- return !(debug_log->log_start - debug_log->log_end);
+}
static ssize_t batadv_log_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { @@ -120,8 +125,7 @@ static ssize_t batadv_log_read(struct file *file, char __user *buf, char *char_addr; char c;
- if ((file->f_flags & O_NONBLOCK) &&
!(debug_log->log_end - debug_log->log_start))
if ((file->f_flags & O_NONBLOCK) && batadv_log_empty(debug_log)) return -EAGAIN;
if (!buf)
@@ -134,7 +138,7 @@ static ssize_t batadv_log_read(struct file *file, char __user *buf, return -EFAULT;
error = wait_event_interruptible(debug_log->queue_wait,
(debug_log->log_start - debug_log->log_end));
(!batadv_log_empty(debug_log)));
if (error) return error;
@@ -175,7 +179,7 @@ static unsigned int batadv_log_poll(struct file *file, poll_table *wait)
poll_wait(file, &debug_log->queue_wait, wait);
- if (debug_log->log_end - debug_log->log_start)
if (!batadv_log_empty(debug_log)) return POLLIN | POLLRDNORM;
return 0;
@@ -370,9 +374,9 @@ int batadv_debugfs_add_meshif(struct net_device *dev)
for (bat_debug = batadv_mesh_debuginfos; *bat_debug; ++bat_debug) { file = debugfs_create_file(((*bat_debug)->attr).name,
S_IFREG | ((*bat_debug)->attr).mode,
bat_priv->debug_dir,
dev, &(*bat_debug)->fops);
S_IFREG | ((*bat_debug)->attr).mode,
bat_priv->debug_dir,
if (!file) { batadv_err(dev, "Can't add debugfs file: %s/%s\n", dev->name, ((*bat_debug)->attr).name);dev, &(*bat_debug)->fops);
Problem been there since 24571be14371a3750ab04bddee85fa53c57a9b34 (the beginning of the debug log code)
diff --git a/gateway_client.c b/gateway_client.c index 6fe5cc8..b421cc4 100644 --- a/gateway_client.c +++ b/gateway_client.c @@ -228,8 +228,8 @@ void batadv_gw_election(struct batadv_priv *bat_priv) } else if ((!curr_gw) && (next_gw)) { batadv_dbg(BATADV_DBG_BATMAN, bat_priv, "Adding route to gateway %pM (gw_flags: %i, tq: %i)\n",
next_gw->orig_node->orig,
next_gw->orig_node->gw_flags, router->tq_avg);
next_gw->orig_node->orig,
batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_ADD, gw_addr); } else {next_gw->orig_node->gw_flags, router->tq_avg);
Regression in 033ae41f1ef4eac0ae20efe1b9d0017cc76815a8 (rename patches).
diff --git a/hard-interface.c b/hard-interface.c index 14e17ea..282bf6e 100644 --- a/hard-interface.c +++ b/hard-interface.c @@ -324,15 +324,15 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, batadv_info(hard_iface->soft_iface, "Adding interface: %s\n", hard_iface->net_dev->name);
- if (atomic_read(&bat_priv->fragmentation) && hard_iface->net_dev->mtu <
ETH_DATA_LEN + BATADV_HEADER_LEN)
- if (atomic_read(&bat_priv->fragmentation) &&
batadv_info(hard_iface->soft_iface, "The MTU of interface %s is too small (%i) to handle thehard_iface->net_dev->mtu < ETH_DATA_LEN + BATADV_HEADER_LEN)
transport
of batman-adv packets. Packets going over this interface will be fragmented on layer2 which could impact the performance. Setting the MTU to %zi would solve the problem.\n", hard_iface->net_dev->name, hard_iface->net_dev->mtu, ETH_DATA_LEN + BATADV_HEADER_LEN);
- if (!atomic_read(&bat_priv->fragmentation) && hard_iface->net_dev->mtu <
ETH_DATA_LEN + BATADV_HEADER_LEN)
- if (!atomic_read(&bat_priv->fragmentation) &&
batadv_info(hard_iface->soft_iface, "The MTU of interface %s is too small (%i) to handle thehard_iface->net_dev->mtu < ETH_DATA_LEN + BATADV_HEADER_LEN)
transport
of batman-adv packets. If you experience problems getting traffic through try increasing the MTU to %zi.\n", hard_iface->net_dev->name, hard_iface->net_dev->mtu, @@ -486,7 +486,7 @@ void batadv_hardif_remove_interfaces(void) }
Regression in 9de347143505f27ef096d883aa0fcf540ffffe5a (from the stone age of unicast fragmentation)
static int batadv_hard_if_event(struct notifier_block *this,
unsigned long event, void *ptr)
unsigned long event, void *ptr)
{ struct net_device *net_dev = ptr; struct batadv_hard_iface *hard_iface;
Regression 5615c4685c88730627a8bea8988d2f8bfe0403be (renaming patches)
diff --git a/originator.c b/originator.c index fc1ce26..ac9bdf8 100644 --- a/originator.c +++ b/originator.c @@ -413,6 +413,7 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset) int batman_count = 0; int last_seen_secs; int last_seen_msecs;
- unsigned long last_seen_jiffies; uint32_t i; int ret = 0;
@@ -451,10 +452,10 @@ int batadv_orig_seq_print_text(struct seq_file *seq, void *offset) if (neigh_node->tq_avg == 0) goto next;
last_seen_secs = jiffies_to_msecs(jiffies -
orig_node->last_seen) / 1000;
last_seen_msecs = jiffies_to_msecs(jiffies -
orig_node->last_seen) % 1000;
last_seen_jiffies = jiffies - orig_node->last_seen;
last_seen_msecs = jiffies_to_msecs(last_seen_jiffies);
last_seen_secs = last_seen_msecs / 1000;
last_seen_msecs = last_seen_msecs % 1000; seq_printf(seq, "%pM %4i.%03is (%3i) %pM [%10s]:", orig_node->orig, last_seen_secs,
Regression in 60dc71980e40e5ee8ee2c67523aaf8f3479dec55 (so old that we have to invent a name for this period of time)
diff --git a/routing.c b/routing.c index b79e42e..bc2b88b 100644 --- a/routing.c +++ b/routing.c @@ -969,8 +969,7 @@ static int batadv_check_unicast_ttvn(struct batadv_priv *bat_priv, ETH_HLEN) < 0) return 0;
ethhdr = (struct ethhdr *)(skb->data +
sizeof(struct batadv_unicast_packet));
ethhdr = (struct ethhdr *)(skb->data + sizeof(*unicast_packet));
/* we don't have an updated route for this client, so we should
- not try to reroute the packet!!
Regression in cea194d90b11aff7fc289149e4c7f305fad3535a (when tt was introduced)
diff --git a/sysfs.c b/sysfs.c index 6d519ee..66518c7 100644 --- a/sysfs.c +++ b/sysfs.c @@ -119,7 +119,7 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \ static BATADV_ATTR_SIF_STORE_UINT(_name, _min, _max, _post_func)\ static BATADV_ATTR_SIF_SHOW_UINT(_name) \ static BATADV_ATTR(_name, _mode, batadv_show_##_name, \
batadv_store_##_name)
batadv_store_##_name)
#define BATADV_ATTR_HIF_STORE_UINT(_name, _min, _max, _post_func) \
Regression in 44e4434de21340e5a973f850ddfc90bd67800b34 (rename patches)
diff --git a/unicast.c b/unicast.c index c42b81d..0016464 100644 --- a/unicast.c +++ b/unicast.c @@ -296,6 +296,7 @@ int batadv_unicast_send_skb(struct sk_buff *skb, struct batadv_priv *bat_priv) struct batadv_neigh_node *neigh_node; int data_len = skb->len; int ret = 1;
unsigned int dev_mtu;
/* get routing information */ if (is_multicast_ether_addr(ethhdr->h_dest)) {
@@ -344,9 +345,9 @@ find_router: if (batadv_tt_global_client_is_roaming(bat_priv, ethhdr->h_dest)) unicast_packet->ttvn = unicast_packet->ttvn - 1;
- dev_mtu = neigh_node->if_incoming->net_dev->mtu; if (atomic_read(&bat_priv->fragmentation) &&
data_len + sizeof(*unicast_packet) >
neigh_node->if_incoming->net_dev->mtu) {
/* send frag skb decreases ttl */ unicast_packet->header.ttl++; ret = batadv_frag_send_skb(skb, bat_priv,data_len + sizeof(*unicast_packet) > dev_mtu) {
Regression introduced in a10b9aa90937448096b509504afe4feed289c25a (fragmentation patches)
Please let me know which part should be placed in a separate patch.
Kind regards, Sven
b.a.t.m.a.n@lists.open-mesh.org