Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jul 1996 11:30:07 +0200 (MET DST)
From:      Nicolas Souchu <Nicolas.Souchu@prism.uvsq.fr>
To:        freebsd-fs@freebsd.org
Cc:        freebsd-scsi@freebsd.org
Subject:   msdosfs and scsi
Message-ID:  <199607100930.LAA02630@angrand.prism.uvsq.fr>

next in thread | raw e-mail | index | archive | help

I've developed a polling driver for an scsi drive ZIP 100 drive
connected to the parallel port.

http://www.prism.uvsq.fr/~son/ppa3.html

Here is my question/problem:

When polling, the system load is horrible... then I want to insert
some tsleep() in the driver.

In fact, when data is not available, the process which runs into
the driver is scheduled with :

s = splbio();
tsleep(..., PRIBIO, "mywait", 1);
splx (s);

BUT: doing this leads 2 concurent processes to a deadlock.

$ mount -t msdos /dev/sd0s4 /zip
$ time dd if=/dev/zero of=/zip/file bs=8192 count=512 &
$ ls -l /zip

dd is waiting on channel "getblk", ls is waiting on channel "msdhgt".

Debugging the driver shows that dd is scheduled and ls starts reading
data from the disk. But then everythings stop.

Should the driver be atomic until returning SUCCESSFULLY_QUEUED ?
Why ? Why not ?

I may get more info. if you need...

nicolas

-- 
Nicolas.Souchu@prism.uvsq.fr
Laboratoire PRiSM - Versailles, FRANCE




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