matthew@ noted a possible misuse of the rwlock used to protect vscsi
authordlg <dlg@openbsd.org>
Fri, 23 Jul 2010 09:41:16 +0000 (09:41 +0000)
committerdlg <dlg@openbsd.org>
Fri, 23 Jul 2010 09:41:16 +0000 (09:41 +0000)
commit32d02b2c6ba5f2b495e2e9f996e170930c6bda61
treebaebc1bd59925df09ffdf07ffbc9caa48e1a0594
parent63849e5fd88548badb6b4cbc81e7a7d559f3c5cd
matthew@ noted a possible misuse of the rwlock used to protect vscsi
from being opened by multiple processes at the same time. then he
pointed out that pool_get can sleep in the middle of scsi_cmd,
during which time the process processing the vscsi requests can go
away.

this uses a state variable to protect vscsi from multiple opens
which is checked by all the process and scsi midlayer entrypoints.
it avoids a potential sleep in the middle of the scsi_cmd handler
by moving to iopools.

lots of tweaks and feedback by matthew@
sys/dev/vscsi.c