Subject: Re: Memory leaks in SMP MIPS linux 2.4.9?

From: Krishna Kondaka <[email-masked]>
Date: Tue, 27 Nov 2001 20:31:32 -0800 (PST)

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
>> 	dependent.
>
>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
	the dcache).
	
Thanks
Krishna

>  Ralf
>
>--- 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.  */
>+#ifdef CONFIG_SMP
>+	if (mm->context)
>+		kfree((void *)mm->context);
>+#endif
> }
> 
> /*