kernel - Fix CAM peripheral error handling
* cam_periph.c was bcopy()ing the *ENTIRE* saved ccb back to the
original when working through certain error results. This completely
destroys linked list entry fields.
* Refactor by hacking a restore_ccb() function which does not copy
over the link list entry fields or the callout structure.
* Fixes panics with CDs, particularly audio CDs, and can also fix
other panics.
Panics are related to situations where an AHCI error or errors occur
while multiple CCBs are queued.
* Also always initialize the state tracking field for various scsi
periphals to ensure that stale data does not result in improper
processing in scsi/*.c's *done() functions.
Reported-by: htse