--- linux-2.4.22/net/ipv4/ipvs/ip_vs_ctl.c.old 2004-02-19 01:42:18.000000000 +0900 +++ linux-2.4.22/net/ipv4/ipvs/ip_vs_ctl.c 2004-02-19 01:43:56.000000000 +0900 @@ -94,9 +94,15 @@ */ static void update_defense_level(void) { - int ip_vs_amem = nr_free_pages() + atomic_read(&page_cache_size) + - atomic_read(&buffermem_pages); - int nomem = (ip_vs_amem < sysctl_ip_vs_amemthresh); + struct sysinfo i; + int availmem; + int nomem; + + /* we only count free and buffered memory (in pages) */ + si_meminfo(&i); + availmem = i.freeram + i.bufferram; + + nomem = (availmem < sysctl_ip_vs_amemthresh); /* drop_entry */ spin_lock(&__ip_vs_dropentry_lock); @@ -136,7 +142,7 @@ if (nomem) { ip_vs_drop_rate = ip_vs_drop_counter = sysctl_ip_vs_amemthresh / - (sysctl_ip_vs_amemthresh-ip_vs_amem); + (sysctl_ip_vs_amemthresh - availmem); sysctl_ip_vs_drop_packet = 2; } else { ip_vs_drop_rate = 0; @@ -146,7 +152,7 @@ if (nomem) { ip_vs_drop_rate = ip_vs_drop_counter = sysctl_ip_vs_amemthresh / - (sysctl_ip_vs_amemthresh-ip_vs_amem); + (sysctl_ip_vs_amemthresh - availmem); } else { ip_vs_drop_rate = 0; sysctl_ip_vs_drop_packet = 1;