From 10abae1df8b85dc08f4611a2d43950f65cea722b Mon Sep 17 00:00:00 2001 From: Cathy Zhou Date: Wed, 2 Dec 2009 15:13:47 -0800 Subject: 6904984 capability negotiation race with ipif_up_done() which could cause no capabilities set --- usr/src/uts/common/inet/ip/ip_if.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'usr/src') diff --git a/usr/src/uts/common/inet/ip/ip_if.c b/usr/src/uts/common/inet/ip/ip_if.c index 879a5d59a1..07ee336d48 100644 --- a/usr/src/uts/common/inet/ip/ip_if.c +++ b/usr/src/uts/common/inet/ip/ip_if.c @@ -1450,8 +1450,12 @@ ill_capability_dispatch(ill_t *ill, mblk_t *mp, dl_capability_sub_t *subp) /* * If no ipif was brought up over this ill, this DL_CAPABILITY_REQ/ACK * is only to get the VRRP capability. + * + * 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_ipif_up_count == 0) { + if (!ill->ill_dl_up) { if (subp->dl_cap == DL_CAPAB_VRRP) ill_capability_vrrp_ack(ill, mp, subp); return; -- cgit v1.2.3