Re: suspected memory leak in sock slab / test7-pre4

From: kuznet@ms2.inr.ac.ru
Date: Mon Aug 28 2000 - 14:24:37 EST


Hello!

> in __write_lock_failed; there, EDI is c02d1f4c, which lies in irq_stat.

EAX is more useful, it points to lock.

This problem look different of described earlier. Now it is plain
deadlock, which is very easy to find.

> Hope this helps nailing it. I'll boot and go home now. Can try things
> tomorrow.

What a pity, since tomorrow I will be absent for week or so.

Try to apply the patch appended. It is BH watchdog, it does the
same thing as nmi watchdog, but catches softirq deadlocks.
I have no idea why standard kernel does not have this.
It will oops stuck cpu after 2 minutes.

Alexey

diff -ur ../vger3-000826/linux/kernel/timer.c linux/kernel/timer.c
--- ../vger3-000826/linux/kernel/timer.c Wed Aug 23 23:04:40 2000
+++ linux/kernel/timer.c Mon Aug 28 23:08:45 2000
@@ -670,8 +679,44 @@
         calc_load(ticks);
 }
 
+#ifndef NO_ANK_FIX
+
+static struct {
+ unsigned long jiffies;
+} bh_watchdog[NR_CPUS];
+
+static inline void do_bh_watchdog(struct pt_regs *regs)
+{
+ /* This assumes x86 timer behaviour. */
+ if ((long)(jiffies - bh_watchdog[smp_processor_id()].jiffies) <= 60*HZ)
+ return;
+
+ bh_watchdog[smp_processor_id()].jiffies = jiffies;
+
+ printk("BH watchdog on CPU%d\n", smp_processor_id());
+
+#ifndef __sparc__
+ if (1) {
+#ifdef __alpha__
+ extern void die_if_kernel(const char * str, struct pt_regs * regs, long err, unsigned long);
+ die_if_kernel("BH Watch Dog", regs, 0, 0);
+#else
+ extern void die(const char * str, struct pt_regs * regs, long err);
+ die("BH Watch Dog", regs, 0);
+#endif
+ printk("Killing %s, it does not help of course.\n", current->comm);
+ send_sig(SIGKILL, current, 1);
+ }
+#endif
+}
+#endif
+
+
 void timer_bh(void)
 {
+#ifndef NO_ANK_FIX
+ bh_watchdog[smp_processor_id()].jiffies = jiffies;
+#endif
         update_times();
         run_timer_list();
 }
@@ -687,6 +732,9 @@
         mark_bh(TIMER_BH);
         if (tq_timer)
                 mark_bh(TQUEUE_BH);
+#ifndef NO_ANK_FIX
+ do_bh_watchdog(regs);
+#endif
 }
 
 #if !defined(__alpha__) && !defined(__ia64__)
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org



This archive was generated by hypermail 2b29 : Thu Aug 31 2000 - 21:00:31 EST