[bus,dummy,libbus] Handle dummy PDO removal
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 5 Jan 2011 19:51:07 +0000 (14:51 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Wed, 5 Jan 2011 19:51:07 +0000 (14:51 -0500)
commitf869b3fb103b2e8e2256b3e0c2f19204b0f8dde1
tree38537094f72b6811c950e996dfbc2c4d1fb8246b
parent25cdc22818104252e9e543437165c68edd664d87
[bus,dummy,libbus] Handle dummy PDO removal

The bus library can unlink a node, but should not be
responsible for deleting the corresponding PDO nor
for freeing associated resources.  A driver can test
for removal by checking the Linked member of the
WVL_S_BUS_NODE that is associated with the device.

This allows for the AoE bus to be uninstalled from
Device Manager without crashing!  What was happening
was that:
- The AoE bus got IRP_MN_REMOVE_DEVICE
  - It passed it on to the PDO
    - The dummy PDO handler unlinked the node and
      deleted the device.
    - It also triggered a re-enumeration of the
      WinVBlock bus.
- AoE shutdown
- The re-enumeration of the WinVBlock bus would find
  the PDO missing and send IRP_MN_REMOVE_DEVICE.
- The device was already deleted!

So now we merely unlink on the first removal IRP,
then delete the PDO on the second IRP, which will be
triggered by bus re-enumeration.
src/include/bus.h
src/winvblock/bus.c
src/winvblock/dummy.c
src/winvblock/libbus/libbus.c