Index: nd6_nbr.c
===================================================================
RCS file: /cvsroot/src/sys/netinet6/nd6_nbr.c,v
retrieving revision 1.128
diff -u -r1.128 nd6_nbr.c
--- nd6_nbr.c   18 Oct 2016 07:30:31 -0000      1.128
+++ nd6_nbr.c   6 Nov 2016 09:16:10 -0000
@@ -1228,6 +1228,7 @@
{
       struct in6_ifaddr *ia = (struct in6_ifaddr *)ifa;
       struct dadq *dp;
+       int duplicate = 0;

#ifndef NET_MPSAFE
       mutex_enter(softnet_lock);
@@ -1285,10 +1286,6 @@
                * We have transmitted sufficient number of DAD packets.
                * See what we've got.
                */
-               int duplicate;
-
-               duplicate = 0;
-
               if (dp->dad_na_icount) {
                       /*
                        * the check is in nd6_dad_na_input(),
@@ -1305,7 +1302,6 @@
               if (duplicate) {
                       /* (*dp) will be freed in nd6_dad_duplicated() */
                       dp = NULL;
-                       nd6_dad_duplicated(ifa);
               } else {
                       /*
                        * We are done with DAD.  No NA came, no NS came.
@@ -1328,6 +1324,10 @@

done:
       mutex_exit(&nd6_dad_lock);
+
+       if (duplicate)
+               nd6_dad_duplicated(ifa);
+
#ifndef NET_MPSAFE
       KERNEL_UNLOCK_ONE(NULL);
       mutex_exit(softnet_lock);