changeset 11229:07f907eb950a

6904984 capability negotiation race with ipif_up_done() which could cause no capabilities set
author Cathy Zhou <Cathy.Zhou@Sun.COM>
date Wed, 02 Dec 2009 15:13:47 -0800
parents c43ac3e928b8
children 2b035c8f8f48
files usr/src/uts/common/inet/ip/ip_if.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/ip/ip_if.c	Wed Dec 02 13:50:23 2009 -0800
+++ b/usr/src/uts/common/inet/ip/ip_if.c	Wed Dec 02 15:13:47 2009 -0800
@@ -1450,8 +1450,12 @@
 	/*
 	 * If no ipif was brought up over this ill, this DL_CAPABILITY_REQ/ACK
 	 * is only to get the VRRP capability.
-	 */
-	if (ill->ill_ipif_up_count == 0) {
+	 *
+	 * Note that we cannot check ill_ipif_up_count here since
+	 * ill_ipif_up_count is only incremented when the resolver is setup.
+	 * That is done asynchronously, and can race with this function.
+	 */
+	if (!ill->ill_dl_up) {
 		if (subp->dl_cap == DL_CAPAB_VRRP)
 			ill_capability_vrrp_ack(ill, mp, subp);
 		return;