Date: Tue, 19 Aug 2003 15:05:15 +0200 From: =?iso-8859-2?Q?Pawe=B3_Ma=B3achowski?= <pawmal@unia.3lo.lublin.pl> To: FreeBSD-gnats-submit@FreeBSD.org Cc: freebsd-bugs@FreeBSD.org Subject: kern/52916 (vinum start/stop panic) Message-ID: <20030819130515.GB62433@unia.3lo.lublin.pl>
index | next in thread | raw e-mail
> 15. Kernel panic happens right now, before splx(s), however sometimes splx()
> is called and biowait() returns with 0 before panic happens.
Actually, this finishing biowait() is not the one called by vinum (bp is
different).
Let's summarize:
It looks that when open_drive() is called, some data in memory are getting
corrupted. After tsleep() [kern/vfs_bio.c, biowait() called from dsinit()],
some other processes have ability to work with disk, however, they usually
fail as described earlier in audit-trail (,,Input/output error'' etc., also
,,handle_workitem_freeblocks: block count'').
In most cases system panics in dscheck() while syncing because of invalid lp
pointer.
Probably this is not an issue when starting vinum from rc.conf, cause / fs
is mounted read-only so write requests are not handled.
This might give a real clue,
I'm testing this on the following HDD configuration:
ad0 - / fs mounted rw (/dev/ad0s1a) and swap (/dev/ad0s1b),
there are no more partitions or slices
da0 - /dev/da0s1b, used only as a dumpdev
da1 - not used
Running FreeBSD 4.8-STABLE. No vinum slices defined.
When I run: vinum read /dev/da0; vinum stop; ...
it will NOT panic. :)
When I run: vinum read /dev/ad0; vinum stop; ...
it WILL panic.
If I force vinum at vinum_scandisk() to call dscheck()
only for ('b'<=x<'i') partitions and run: vinum read /dev/ad0; vinum stop; ...
seems it will NOT panic.
If I force vinum at vinum_scandisk() to call dscheck()
for ('a'<=x<'i', excluding 'c' and 'b') partition and run:
vinum read /dev/ad0; vinum stop; ...
seems it will NOT panic.
If I force vinum at vinum_scandisk() to call dscheck()
only for ('a'<=x<'c') partitions and run: vinum read /dev/ad0; vinum stop; ...
it WILL panic, but not too fast.
If I force vinum at vinum_scandisk() to call dscheck()
only for ('a'<=x<'b') partition and run: vinum read /dev/ad0; vinum stop; ...
seems it will NOT panic.
where:
,,seems it will NOT panic'' == >500 iterations of read/stop loop without
problem during ad0s1a (cd /usr/ports && make clean) activity.
--
Paweł Małachowski
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030819130515.GB62433>
