Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 May 2007 11:18:08 +0200
From:      =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no>
To:        Lawrence Stewart <lstewart@room52.net>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Writing a plain text file to disk from kernel space
Message-ID:  <86r6p9md2n.fsf@dwp.des.no>
In-Reply-To: <4652AD8C.7000605@room52.net> (Lawrence Stewart's message of "Tue\, 22 May 2007 18\:45\:00 %2B1000")
References:  <4649349D.4060101@room52.net> <200705150847.38838.marc.loerner@hob.de> <46499491.2010205@room52.net> <f2j5hf$hap$2@sea.gmane.org> <46515DE0.20209@room52.net> <86sl9qtpd1.fsf@dwp.des.no> <4652AD8C.7000605@room52.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Lawrence Stewart <lstewart@room52.net> writes:
> After further investigation, it turns out that the pfil input hook I'm
> using, which catches packets as they traverse up the network stack,
> has no problems, and will happily write to the file using the
> kio_write function. However, in the pfil output hook, a call to
> kio_write causes a hard reset, with the following text shown on tty0:
>
> Sleeping thread (tid 100069, pid 613) owns a non-sleepable lock
> panic: sleeping thread

This is a panic, not a hard reset.

Since you are writing kernel code, I assume you have KDB/DDB in your
kernel and know how to use it.

> If I comment out the kio_write code and put a printf instead, there
> are no such problems, so it seems the kio_write function is doing
> something that is upsetting the kernel, but only when called from a
> function that is acting as a pfil output hook? Strikes me as odd
> behaviour. I don't understand which thread the error is in relation
> to, why that thread is sleeping or which lock it is referring to.

kio_write probably blocks waiting for the write to complete.  You can't
do that while holding a non-sleepable lock.

> I tried wrapping the call to kio_write in a mutex, in case there was a
> race condition caused by multiple threads trying to write to the file
> at the one time, but that hasn't made a difference at all.

It complains about sleeping with a non-sleepable lock held, and your
solution is to add another non-sleepable lock?

DES
--=20
Dag-Erling Sm=C3=B8rgrav - des@des.no



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86r6p9md2n.fsf>