Thanks for the quick reply ralf!
Sorry for not mentioning that I did already patch my 2.4.9 with the fix that
you mentioned. Even then the MemFree is continuously going down.
>On Tue, Nov 27, 2001 at 05:09:00PM -0800, Krishna Kondaka wrote:
>> I suspect that there are some memory leaks in the SMP MIPS linux 2.4.9.
>> I would like to know if any one found the root cause and fixed them.
>See patch below for fix.
>> I just ran the script for 3 hours are here is the diff between
>> the out put of /proc/meminfo and /proc/slabinfo before and
>> after the test run ( lines with "<" are before the test and
>> lines with ">" are after the test)
>(Try diff -u which generates much more human readable output.)
>> When I did some investigation, it looked like d_lookup() is
>> not finding /proc/meminfo and /proc/slabinfo in the dcache and
>> it is doing d_alloc() to add these to the cache every time
>> cat /proc/meminfo or cat /proc/slabinfo is done. This looked odd
>> and I ran the same script on x86 based linux (running 2.4.2) and
>> I did not see MemFree (or any other caches) changing after the
>> test was run for an hour. I am not sure how this is architecture
>These caches essentially keep growing until you run out of memory which
>is when they'll be freed.
Yeah! But there is no need for them to grow because I am accessing
the same file names again and again and hence they should be
available in the cache after the first time. d_alloc()s are not
not being done when referencing /lib/libc.so.6 second time but
they are being done when referencing /proc/meminfo or /proc/slabinfo.
The behavior is different because "/proc" is a mount point and
"/lib" is not. But I still feel that there is no need to do d_alloc()
for repeatedly when /proc/meminfo is already in the cache(I have printed
the entire dcache entries and it shows that /proc/meminfo is in
>--- linux.orig/include/asm-mips/mmu_context.h.orig Wed Nov 28 14:45:19 2001
>+++ linux/include/asm-mips/mmu_context.h Wed Nov 28 14:47:37 2001
>@@ -109,7 +109,10 @@
> extern inline void destroy_context(struct mm_struct *mm)
>- /* Nothing to do. */
>+ if (mm->context)
>+ kfree((void *)mm->context);