batman-adv: fix lockdep splat when doing mcast_free
authorSimon Wunderlich <simon@open-mesh.com>
Mon, 30 Nov 2015 16:34:01 +0000 (17:34 +0100)
committerAntonio Quartulli <a@unstable.cc>
Wed, 13 Jan 2016 11:26:25 +0000 (19:26 +0800)
While testing, we got something like this:

WARNING: CPU: 0 PID: 238 at net/batman-adv/multicast.c:142 batadv_mcast_mla_tt_retract+0x94/0x205 [batman_adv]()
[...]
Call Trace:
[<ffffffff815fc597>] dump_stack+0x4b/0x64
[<ffffffff810b34dc>] warn_slowpath_common+0xbc/0x120
[<ffffffffa0024ec5>] ? batadv_mcast_mla_tt_retract+0x94/0x205 [batman_adv]
[<ffffffff810b3705>] warn_slowpath_null+0x15/0x20
[<ffffffffa0024ec5>] batadv_mcast_mla_tt_retract+0x94/0x205 [batman_adv]
[<ffffffffa00273fe>] batadv_mcast_free+0x36/0x39 [batman_adv]
[<ffffffffa0020c77>] batadv_mesh_free+0x7d/0x13f [batman_adv]
[<ffffffffa0036a6b>] batadv_softif_free+0x15/0x25 [batman_adv]
[...]

Signed-off-by: Simon Wunderlich <simon@open-mesh.com>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
net/batman-adv/multicast.c

index eb76386..75fa501 100644 (file)
@@ -802,7 +802,9 @@ void batadv_mcast_free(struct batadv_priv *bat_priv)
        batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_MCAST, 1);
        batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_MCAST, 1);
 
+       spin_lock_bh(&bat_priv->tt.commit_lock);
        batadv_mcast_mla_tt_retract(bat_priv, NULL);
+       spin_unlock_bh(&bat_priv->tt.commit_lock);
 }
 
 /**