set_primary_if exchanges the current primary interfaces with a new one.
This is a new reference and thus we have to count it and decrease the
count of the old primary interface.

Signed-off-by: Sven Eckelmann <[email protected]>
---
 drivers/staging/batman-adv/hard-interface.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/batman-adv/hard-interface.c 
b/drivers/staging/batman-adv/hard-interface.c
index eef5631..a9d6f1d 100644
--- a/drivers/staging/batman-adv/hard-interface.c
+++ b/drivers/staging/batman-adv/hard-interface.c
@@ -111,9 +111,17 @@ static void set_primary_if(struct bat_priv *bat_priv,
 {
        struct batman_packet *batman_packet;
        struct vis_packet *vis_packet;
+       struct batman_if *old_if;
 
+       if (batman_if)
+               hardif_hold(batman_if);
+
+       old_if = bat_priv->primary_if;
        bat_priv->primary_if = batman_if;
 
+       if (old_if)
+               hardif_put(old_if);
+
        if (!bat_priv->primary_if)
                return;
 
-- 
1.7.2.3

Reply via email to