lkml.org 
[lkml]   [1999]   [Mar]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[Stuck in wait_on_bh problem] possibly fixed (?)
Hey stuck in wait_on_bh people,

I stuck 2.2.2ac1 on the server that was getting the wait_on_bh stuckups
and left on vacation for a week. When I got back, the logs show that the
machine got a bunch of SCSI timeouts (around 30), which started to occur
in the first place when the motherboard was swapped (probably a dumb
problem somewhere), but also something rather interesting -- two of the
timeouts were immediately followed by wait_on_bh messages...and the box
recovered! Perhaps something in the SCSI code was fixed? The box has now
been up 9 days and it hasn't locked up yet.

Has anybody else noticed this as well?

Syslog messages:

...
Mar 1 11:00:31 peace kernel: (scsi0:-1:-1:-1) 6 commands found and queued for completion.
Mar 1 11:00:31 peace kernel:
Mar 1 11:00:31 peace kernel: wait_on_bh, CPU 1:
Mar 1 11:00:31 peace kernel: irq: 0 [0 0]
Mar 1 11:00:31 peace kernel: bh: 1 [1 0]
Mar 1 11:00:33 peace kernel: <[c010adb1]> <[c01737f3]> <[c017ae5f]> <[c017add0]> <[c015bb2e]> <[c017add0]> <[c015bd45]> <[c015bcac]> <6>(scsi0:0:1:0) Synchronous at 40.0 Mbyte/sec, offset 31.
Mar 1 11:00:33 peace kernel: (scsi0:0:3:0) Synchronous at 40.0 Mbyte/sec, offset 31.
Mar 1 11:00:33 peace kernel: (scsi0:0:4:0) Synchronous at 40.0 Mbyte/sec, offset 31.

and

...
Mar 2 14:00:43 peace kernel: (scsi0:-1:-1:-1) 6 commands found and queued for completion.
Mar 2 14:00:43 peace kernel:
Mar 2 14:00:43 peace kernel: wait_on_bh, CPU 1:
Mar 2 14:00:43 peace kernel: irq: 0 [0 0]
Mar 2 14:00:43 peace kernel: bh: 1 [1 0]
Mar 2 14:00:45 peace kernel: <[c010adb1]> <[c01737f3]> <[c017ae5f]> <[c017add0]> <[c015bb2e]> <[c017add0]> <[c015bd45]> <[c015bcac]> <6>(scsi0:0:1:0) Synchronous at 40.0 Mbyte/sec, offset 31.
Mar 2 14:00:45 peace kernel: (scsi0:0:3:0) Synchronous at 40.0 Mbyte/sec, offset 31.
Mar 2 14:00:45 peace kernel: (scsi0:0:4:0) Synchronous at 40.0 Mbyte/sec, offset 31.

Stack trace:

> c010ad74 T synchronize_bh
> c0173778 t tcp_v4_sendmsg
> c017add0 T inet_sendmsg
> c017ad28 T inet_recvmsg
> c015baa4 T sock_sendmsg
> c017ad28 T inet_recvmsg
> c015bcac t sock_write
> c015bc0c t sock_read

(Exactly the same for the last two times I decoded it, too...)


If you want to try ac7 and you use aic7xxx SCSI, you may want to apply the
attached patch to revert a hunk to from the aic7xxx driver version 5.1.11
-> 5.1.12 patch that does some changes to the code that sets the
"DSCOMMAND0" register -- I needed to do this to avoid seeing even more
SCSI timeouts all over the place (but only one some revisions of the 7880
chipset).

I also attached my silly little perl script to less-painfully find stuff
in System.map when it's not in an oops format. ksymoops probably already
does it somehow, but why not.

Simon-

| Simon Kirby | Systems Administration |
| mailto:sim@netnation.com | NetNation Communications |
| http://www.netnation.com/ | Tech: (604) 684-6892 |
--- linux/drivers/scsi/aic7xxx.c Fri Mar 5 19:06:22 1999
+++ linux/drivers/scsi/aic7xxx.c.orig Fri Mar 5 11:30:45 1999
@@ -9227,17 +9227,11 @@
/*
* Set the DSCOMMAND0 register on these cards different from
* on the 789x cards. Also, read the SEEPROM as well.
+ */
aic_outb(temp_p, (aic_inb(temp_p, DSCOMMAND0) |
CACHETHEN | MPARCKEN) & ~DPARCKEN,
DSCOMMAND0);
- aic7xxx_load_seeprom(temp_p, &sxfrctl1);
- break;
- case AHC_AIC7870:
case AHC_AIC7895:
- */
- aic_outb(temp_p, (aic_inb(temp_p, DSCOMMAND0) |
- MPARCKEN) & ~(DPARCKEN | CACHETHEN),
- DSCOMMAND0);
aic7xxx_load_seeprom(temp_p, &sxfrctl1);
break;
}#!/usr/bin/perl

# Cheap (linear-searching) but helpful System.map name matcher
# Example input (stdin):
# c010ad74
# c0173778 ...etc...
#
# Simon Kirby, 1999/03/05

$contextsize = 2;
$f = $ARGV[0];
$f = '/System.map' if ($f eq '');

open(IN,"< $f") or die "open(): $!\n";
while (<IN>){
if (/^([a-z0-9]+) /){
push(@em,$1);
chomp;
$em{$1} = $_;
}
}
close(IN);

@em = sort @em;

while (<STDIN>){
chomp;
$d = hextodec($_);
next unless ($d);
print "$_:\n";
@ring = ((undef) x ($contextsize + 1));
$printnext = $found = 0;
foreach (@em){
if ($printnext > 0){
$printnext--;
print " $em{$_}\n";
last if (!$printnext);
}
if (!$found && hextodec($_) >= $d){
$found++;
$gotcha = pop(@ring);
foreach $r (@ring){
print " $em{$r}\n";
}
print ">>> $em{$gotcha}\n";
push(@output,$em{$gotcha});
print " $em{$_}\n";
$printnext = $contextsize - 1;
}
shift(@ring);
push(@ring,$_);
}
}

print "\nTrace:\n";
foreach (@output){
print "> $_\n";
}

exit 0;

sub hextodec {
unpack("N", pack("H8", substr("0" x 8 . shift, -8)));
}
\
 
 \ /
  Last update: 2005-03-22 13:50    [W:0.023 / U:0.080 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site