I did but perhaps I'm wrong. There are one or two niceties I have
learned about (from getting shadowing support in vddriver...and I
have one that now is tested and works with dec volume shadowing...)
that have to do with returning byte count on illegal functions (shdriver
is kind of ill behaved) and with ensuring that IRPs that come from
mount verify (the MVIRP bit set in irp$l_sts) don't get in
trouble with or screw up any other synchronization. Unlike all others
these just call driver start-io without synch on the busy bit...so
I need to ensure that these just get acted on without clobbering any
UCB fields needed for "real" I/O. Since we have other info to tell
whether a disk is in fact present, the first packack can be let by
to get the disk back in, and other such I/O should return ss$_medofl
until the drvcon bit is set in the JB UCB, then return success for
packack. MV won't send any reads till the packack succeeds, but
doesn't synch its reads either, so that path should just go
direct, and NOT steal irp$l_pid, but unbusy the JB device and send
the I/O there. This should be done directly, via CALL_INITIATE,
rather than via insioqc, to do it the way MV expects.

That way mount verify should be ok. The other fix is just to return
R0 with the high word containing irp$w_bcnt (or the low half of
irp$l_bcnt anyhow) and 1 in low word if the function is unsupported...this
from the startio entry. Seems shadowing calls io$_dse and needs this...
EVEN IF THE DRIVER DOES NOT CLAIM THIS IS A LEGAL FUNCTION. Lose lose lose.