hc_head
struct hc_head *hashbase;
V_tcp_hostcache.hashbase = (struct hc_head *)
malloc(V_tcp_hostcache.hashsize * sizeof(struct hc_head),
struct hc_head *hc_head;
hc_head = &V_tcp_hostcache.hashbase[HOSTCACHE_HASH(inc)];
CK_SLIST_FOREACH(hc_entry, &hc_head->hch_bucket, hc_q)
struct hc_head *hc_head;
hc_head = &V_tcp_hostcache.hashbase[HOSTCACHE_HASH(inc)];
THC_LOCK(hc_head);
CK_SLIST_FOREACH(hc_entry, &hc_head->hch_bucket, hc_q) {
if (hc_head->hch_length >= V_tcp_hostcache.bucket_limit ||
CK_SLIST_FIRST(&hc_head->hch_bucket)) != NULL) {
CK_SLIST_REMOVE_HEAD(&hc_head->hch_bucket,
THC_UNLOCK(hc_head);
KASSERT(hc_head->hch_length > 0 &&
hc_head->hch_length <= V_tcp_hostcache.bucket_limit,
hc_head));
hc_head->hch_length--;
THC_UNLOCK(hc_head);
CK_SLIST_INSERT_HEAD(&hc_head->hch_bucket, hc_entry, hc_q);
hc_head->hch_length++;
KASSERT(hc_head->hch_length <= V_tcp_hostcache.bucket_limit,
("tcp_hostcache: bucket length too high at %p", hc_head));
} else if (hc_entry != CK_SLIST_FIRST(&hc_head->hch_bucket)) {
CK_SLIST_INSERT_HEAD(&hc_head->hch_bucket, hc_entry, hc_q);
THC_UNLOCK(hc_head);
struct hc_head *head;