View | Details | Raw Unified | Return to bug 234296 | Differences between
and this patch

Collapse All | Expand All

(-)b/sys/netinet/in.c (-6 / +11 lines)
Lines 1382-1396 in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add Link Here
1382
	IF_AFDATA_LOCK_ASSERT(llt->llt_ifp);
1382
	IF_AFDATA_LOCK_ASSERT(llt->llt_ifp);
1383
	KASSERT(l3addr->sa_family == AF_INET,
1383
	KASSERT(l3addr->sa_family == AF_INET,
1384
	    ("sin_family %d", l3addr->sa_family));
1384
	    ("sin_family %d", l3addr->sa_family));
1385
	lle = in_lltable_find_dst(llt, sin->sin_addr);
1385
	KASSERT((flags & (LLE_UNLOCKED | LLE_EXCLUSIVE)) !=
1386
	    (LLE_UNLOCKED | LLE_EXCLUSIVE),
1387
	    ("wrong lle request flags: %#x", flags));
1386
1388
1389
	lle = in_lltable_find_dst(llt, sin->sin_addr);
1387
	if (lle == NULL)
1390
	if (lle == NULL)
1388
		return (NULL);
1391
		return (NULL);
1389
1390
	KASSERT((flags & (LLE_UNLOCKED|LLE_EXCLUSIVE)) !=
1391
	    (LLE_UNLOCKED|LLE_EXCLUSIVE),("wrong lle request flags: 0x%X",
1392
	    flags));
1393
1394
	if (flags & LLE_UNLOCKED)
1392
	if (flags & LLE_UNLOCKED)
1395
		return (lle);
1393
		return (lle);
1396
1394
Lines 1398-1403 in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add Link Here
1398
		LLE_WLOCK(lle);
1396
		LLE_WLOCK(lle);
1399
	else
1397
	else
1400
		LLE_RLOCK(lle);
1398
		LLE_RLOCK(lle);
1399
	if (__predict_false((lle->la_flags & LLE_LINKED) == 0)) {
1400
		if (flags & LLE_EXCLUSIVE)
1401
			LLE_WUNLOCK(lle);
1402
		else
1403
			LLE_RUNLOCK(lle);
1404
		lle = NULL;
1405
	}
1401
1406
1402
	return (lle);
1407
	return (lle);
1403
}
1408
}
(-)b/sys/netinet6/in6.c (-6 / +10 lines)
Lines 2325-2340 in6_lltable_lookup(struct lltable *llt, u_int flags, Link Here
2325
	IF_AFDATA_LOCK_ASSERT(llt->llt_ifp);
2325
	IF_AFDATA_LOCK_ASSERT(llt->llt_ifp);
2326
	KASSERT(l3addr->sa_family == AF_INET6,
2326
	KASSERT(l3addr->sa_family == AF_INET6,
2327
	    ("sin_family %d", l3addr->sa_family));
2327
	    ("sin_family %d", l3addr->sa_family));
2328
	KASSERT((flags & (LLE_UNLOCKED | LLE_EXCLUSIVE)) !=
2329
	    (LLE_UNLOCKED | LLE_EXCLUSIVE),
2330
	    ("wrong lle request flags: %#x", flags));
2328
2331
2329
	lle = in6_lltable_find_dst(llt, &sin6->sin6_addr);
2332
	lle = in6_lltable_find_dst(llt, &sin6->sin6_addr);
2330
2331
	if (lle == NULL)
2333
	if (lle == NULL)
2332
		return (NULL);
2334
		return (NULL);
2333
2334
	KASSERT((flags & (LLE_UNLOCKED|LLE_EXCLUSIVE)) !=
2335
	    (LLE_UNLOCKED|LLE_EXCLUSIVE),("wrong lle request flags: 0x%X",
2336
	    flags));
2337
2338
	if (flags & LLE_UNLOCKED)
2335
	if (flags & LLE_UNLOCKED)
2339
		return (lle);
2336
		return (lle);
2340
2337
Lines 2342-2347 in6_lltable_lookup(struct lltable *llt, u_int flags, Link Here
2342
		LLE_WLOCK(lle);
2339
		LLE_WLOCK(lle);
2343
	else
2340
	else
2344
		LLE_RLOCK(lle);
2341
		LLE_RLOCK(lle);
2342
	if (__predict_false((lle->la_flags & LLE_LINKED) == 0)) {
2343
		if (flags & LLE_EXCLUSIVE)
2344
			LLE_WUNLOCK(lle);
2345
		else
2346
			LLE_RUNLOCK(lle);
2347
		return (lle);
2348
	}
2345
	return (lle);
2349
	return (lle);
2346
}
2350
}
2347
2351

Return to bug 234296