tran_setup_pkt(9E) should document constraints on failure
the tran_setup_pkt() handler a HBA driver implements should only fail on a recoverable condition, it should not fail because of a property of the pkt it is setting up is incorrect.
this is because the SCSI layer (and sd(7D) in particular) consider tran_setup_pkt failures as transient. if setup_pkt fails against a certain pkt, it will be queued and the setup call will be retried in the future. if a tran_setup_pkt fails a pkt because of something like a cdblen or scblen check, the pkt will remain in the waitq and can block further commands from being setup correctly and running on the hba. setup_pkt handlers should limit themselves to reporting allocation or queue full errors, which may clear and therefore succeed in the future.
pkt property checks should instead be implemented in the tran_start handler and cause TRAN_BADPKT to be returned.