fdb->is_static = 0;
                fdb->updated = fdb->used = jiffies;
                hlist_add_head_rcu(&fdb->hlist, head);
-               fdb_notify(fdb, RTM_NEWNEIGH);
        }
        return fdb;
 }
                return -ENOMEM;
 
        fdb->is_local = fdb->is_static = 1;
+       fdb_notify(fdb, RTM_NEWNEIGH);
        return 0;
 }
 
                }
        } else {
                spin_lock(&br->hash_lock);
-               if (likely(!fdb_find(head, addr)))
-                       fdb_create(head, source, addr);
-
+               if (likely(!fdb_find(head, addr))) {
+                       fdb = fdb_create(head, source, addr);
+                       if (fdb)
+                               fdb_notify(fdb, RTM_NEWNEIGH);
+               }
                /* else  we lose race and someone else inserts
                 * it first, don't bother updating
                 */
                fdb = fdb_create(head, source, addr);
                if (!fdb)
                        return -ENOMEM;
+               fdb_notify(fdb, RTM_NEWNEIGH);
        } else {
                if (flags & NLM_F_EXCL)
                        return -EEXIST;