[ Resent with a reasonable subject and to lvs-devel :) ] Hello! I was noticing a significant amount of what seems/seemed to be destination lists with multiple entries with the lblcr LVS algorithm. While tracking it down, I think I stumbled over a mistake. In ip_vs_lblcr_full_check(), it appears the time check logic is reversed: for (i=0, j=tbl->rover; i<IP_VS_LBLCR_TAB_SIZE; i++) { j = (j + 1) & IP_VS_LBLCR_TAB_MASK; write_lock(&svc->sched_lock); list_for_each_entry_safe(en, nxt, &tbl->bucket[j], list) { if (time_after(en->lastuse+sysctl_ip_vs_lblcr_expiration, now)) continue; ip_vs_lblcr_free(en); atomic_dec(&tbl->entries); } write_unlock(&svc->sched_lock); } Shouldn't this be "time_before"? It seems that it currently nukes all recently-used entries every time this function is called, which seems to be every 30 minutes, rather than removing the not-recently-used ones. If my reading is correct, this patch should fix it. Am I missing something? Cheers, Simon- diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c b/net/netfilter/ipvs/ip_vs_lblcr.c index 715b57f..937743f 100644 --- a/net/netfilter/ipvs/ip_vs_lblcr.c +++ b/net/netfilter/ipvs/ip_vs_lblcr.c @@ -432,7 +432,7 @@ static inline void ip_vs_lblcr_full_check(struct ip_vs_service *svc) write_lock(&svc->sched_lock); list_for_each_entry_safe(en, nxt, &tbl->bucket[j], list) { - if (time_after(en->lastuse+sysctl_ip_vs_lblcr_expiration, + if (time_before(en->lastuse+sysctl_ip_vs_lblcr_expiration, now)) continue; -- To unsubscribe from this list: send the line "unsubscribe lvs-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html