[filedisk] Make all filedisks threaded
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Tue, 18 Jan 2011 13:24:06 +0000 (08:24 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 19 Jan 2011 04:00:10 +0000 (23:00 -0500)
commit1ee7c31609bca1482dc698c52d59bd74f1386a68
tree19524524fdfbf9c0328ceb35fbc7f638c0da7222
parent61514f486506d34e66e9d50147537fe738140d61
[filedisk] Make all filedisks threaded

We don't have any control over how long it will take
for file I/O to complete (network share, for example),
so we will pend all SCSI reads/writes and each filedisk's
thread will complete them.

Hot-swapping a sector-mapped disk to a file-backed disk
for any number of disks is done from a single, special
thread.  Since GRUB4DOS is the only case where such info
is passed, GRUB4DOS is the only caller for the function
which starts up this special thread.  It's really quite
messy right now and needs a major clean-up.

The reason why the hot-swapping thread is its own thread
is to avoid the dead-lock where NTFS is trying to mount
a partition, then if the same thread tries to open a
file (to test for an appropriate file-backing) on an
NTFS volume, NTFS is already "busy".

The unfortunate thing is that the hot-swapping thread
doesn't guarantee a file lock as early as possible.
This can be improved, some day.
src/include/filedisk.h
src/winvblock/filedisk/filedisk.c
src/winvblock/filedisk/grub4dos.c
src/winvblock/probe.c