Date: Mon, 19 Oct 1998 00:36:30 -0700 (PDT) From: Matthew Dillon <dillon@apollo.backplane.com> To: cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Anyone got any ideas? getblk/pgtblk/inode lockup Message-ID: <199810190736.AAA12327@apollo.backplane.com>
next in thread | raw e-mail | index | archive | help
I've been trying to track this down for a month or two now... it's
the only regular crash I get under -current these days.
What happens is that a process gets stuck in pgtblk (kern/vfs_bio.c
line 1800 or so). This causes a cascade of processes locking up
until the system goes crunch. The lockup occurs about once a week on
a heavily loaded machine with lots of processes that use mmap() heavily
(i.e. running Diablo).
The code in question is this:
} else if (m->flags & PG_BUSY) {
s = splvm();
if (m->flags & PG_BUSY) {
vm_page_flag_set(m, PG_WANTED);
tsleep(m, PVM, "pgtblk", 0);
}
splx(s);
goto doretry;
} ...
Looking at the kernel dump, the page structure 'm' in the process locked
up in pgtblk has PG_WANTED and PG_TABLED set, but PG_BUSY cleared.
This combined with the code fragment above leads me to believe that
PG_BUSY is somehow being cleared on the page without waking up the
process.
(kgdb) print *m
$3 = {
pageq = {
tqe_next = 0xf0f46024,
tqe_prev = 0xf0ee7438
},
hashq = {
tqe_next = 0xf0f46024,
tqe_prev = 0xf0c3df50
},
listq = {
tqe_next = 0xf0f184e4,
tqe_prev = 0xf0eb0d14
},
object = 0xfc4e3440,
pindex = 0x90,
phys_addr = 0x35ed000,
queue = 0x82,
flags = 0x6, PG_WANTED, PG_TABLED
pc = 0x2d,
wire_count = 0x0,
hold_count = 0x0,
act_count = 0x5,
busy = 0x1,
valid = 0x0,
dirty = 0x0
}
I have other kernel dumps that show the same thing. The page flags are
similar, except I see 0x46 sometimes (PG_ZERO|PG_TABLED|PG_WANTED).
It's virtually the only crash I've gotten with FreeBSD-current so far.
If anyone has any ideas, I'm all ears. I've been chasing this one for a
few months.
-Matt
Matthew Dillon Engineering, HiWay Technologies, Inc. & BEST Internet
Communications & God knows what else.
<dillon@backplane.com> (Please include original email in any response)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810190736.AAA12327>
