{
        fw_node_event(card, node, FW_NODE_DESTROYED);
        fw_node_put(node);
+
+       /* Topology has changed - reset bus manager retry counter */
+       card->bm_retries = 0;
 }
 
 static void
        }
 
        fw_node_event(card, node, FW_NODE_CREATED);
+
+       /* Topology has changed - reset bus manager retry counter */
+       card->bm_retries = 0;
 }
 
 void fw_destroy_nodes(struct fw_card *card)
 
        spin_lock_irqsave(&card->lock, flags);
 
-       /*
-        * If the new topology has a different self_id_count the topology
-        * changed, either nodes were added or removed. In that case we
-        * reset the IRM reset counter.
-        */
-       if (card->self_id_count != self_id_count)
-               card->bm_retries = 0;
-
        card->node_id = node_id;
        /*
         * Update node_id before generation to prevent anybody from using