Currently, there's two races with the reference counting. One is a
race on the submission thread side. Prior to r333648 the refcount
protected against the completion from the xpt_action routine
triggering a wither and daclose before we could finish submitting and
reaquire the lock. This commit puts that back in place. However,
r333648 protects against another race that sometimes happens due to
bugs in GEOM where a request is submitted to the hardware and while
it's processing geom withers the device and calls daclose. There are
holes in GEOM's reference counting that allow this when I/O comes in
via geom_dev instead of geom_vfs (another commit will fix the known
hole where BIO_DELETEs are queued from ffs_blkfree via geom_dev
instead of geom_vfs which is how we saw this). While GEOM should be
perfect and not do this, at least one more hole still exists in
BIO_ZONE handling. To fail safe against this, and future GEOM bugs,
take out a second reference and release it in dadone like we did in
r333648.
Sponsored by: Netflix