batman-adv: Initialize lockdep class keys for hashes
authorAntonio Quartulli <ordex@autistici.org>
Sat, 10 Nov 2012 10:00:32 +0000 (11:00 +0100)
committerAntonio Quartulli <ordex@autistici.org>
Sat, 12 Jan 2013 10:58:21 +0000 (20:58 +1000)
Different hashes have the same class key because they get
initialised with the same one. For this reason lockdep can create
false warning when they are used recursively.

Re-initialise the key for each hash after the invocation to hash_new()
to avoid this problem.

Signed-off-by: Antonio Quartulli <ordex@autistici.org>
Tested-by: Linus Lüssing <linus.luessing@web.de>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
net/batman-adv/originator.c
net/batman-adv/translation-table.c
net/batman-adv/vis.c

index 8c32cf1c2deca7177945a804afcdf6ad10572ee5..109081c49bbd02adc3205cf991d3b0ab3a962cc8 100644 (file)
@@ -29,6 +29,9 @@
 #include "soft-interface.h"
 #include "bridge_loop_avoidance.h"
 
+/* hash class keys */
+static struct lock_class_key batadv_orig_hash_lock_class_key;
+
 static void batadv_purge_orig(struct work_struct *work);
 
 static void batadv_start_purge_timer(struct batadv_priv *bat_priv)
@@ -57,6 +60,9 @@ int batadv_originator_init(struct batadv_priv *bat_priv)
        if (!bat_priv->orig_hash)
                goto err;
 
+       batadv_hash_set_lock_class(bat_priv->orig_hash,
+                                  &batadv_orig_hash_lock_class_key);
+
        batadv_start_purge_timer(bat_priv);
        return 0;
 
index 5f442328f2e69f61991b30c1039c099508a52b0c..c6fd0b760d3e8a2f8b4c9310ad608fa367731fb4 100644 (file)
 
 #include <linux/crc16.h>
 
+/* hash class keys */
+static struct lock_class_key batadv_tt_local_hash_lock_class_key;
+static struct lock_class_key batadv_tt_global_hash_lock_class_key;
+
 static void batadv_send_roam_adv(struct batadv_priv *bat_priv, uint8_t *client,
                                 struct batadv_orig_node *orig_node);
 static void batadv_tt_purge(struct work_struct *work);
@@ -235,6 +239,9 @@ static int batadv_tt_local_init(struct batadv_priv *bat_priv)
        if (!bat_priv->tt.local_hash)
                return -ENOMEM;
 
+       batadv_hash_set_lock_class(bat_priv->tt.local_hash,
+                                  &batadv_tt_local_hash_lock_class_key);
+
        return 0;
 }
 
@@ -694,6 +701,9 @@ static int batadv_tt_global_init(struct batadv_priv *bat_priv)
        if (!bat_priv->tt.global_hash)
                return -ENOMEM;
 
+       batadv_hash_set_lock_class(bat_priv->tt.global_hash,
+                                  &batadv_tt_global_hash_lock_class_key);
+
        return 0;
 }
 
index 0f65a9de5f749719b9b778cd8c989680b0b1eb4d..60eb9b7ca8d10643fc7c807fc36d8b8632312c2d 100644 (file)
@@ -28,6 +28,9 @@
 
 #define BATADV_MAX_VIS_PACKET_SIZE 1000
 
+/* hash class keys */
+static struct lock_class_key batadv_vis_hash_lock_class_key;
+
 static void batadv_start_vis_timer(struct batadv_priv *bat_priv);
 
 /* free the info */
@@ -852,6 +855,9 @@ int batadv_vis_init(struct batadv_priv *bat_priv)
                goto err;
        }
 
+       batadv_hash_set_lock_class(bat_priv->vis.hash,
+                                  &batadv_vis_hash_lock_class_key);
+
        bat_priv->vis.my_info = kmalloc(BATADV_MAX_VIS_PACKET_SIZE, GFP_ATOMIC);
        if (!bat_priv->vis.my_info)
                goto err;