--- l/net/batman-adv/network-coding.c +++ n/net/batman-adv/network-coding.c @@ -403,12 +403,18 @@ static void batadv_nc_purge_orig_hash(st /* For each orig_node */ for (i = 0; i < hash->size; i++) { + unsigned long ts; + head = &hash->table[i]; rcu_read_lock(); - hlist_for_each_entry_rcu(orig_node, head, hash_entry) + ts = jiffies + 20; + hlist_for_each_entry_rcu(orig_node, head, hash_entry) { + if (time_after(jiffies, ts)) + break; batadv_nc_purge_orig(bat_priv, orig_node, batadv_nc_to_purge_nc_node); + } rcu_read_unlock(); } }