When the TEST UNIT READY command receives an error response, the
shutdown of the command's block data interface will result in
scsidev_ready() closing the SCSI device. This will subsequently
result in a duplicate call to scsicmd_close(), leading to an assertion
failure when list_del() is called for the second time.
Fix by removing the command from the list of outstanding commands
before shutting down the command's interfaces.
Signed-off-by: Michael Brown <mcb30@ipxe.org>
scsidev, scsicmd->tag, strerror ( rc ) );
}
+ /* Remove from list of commands */
+ list_del ( &scsicmd->list );
+
/* Shut down interfaces */
intfs_shutdown ( rc, &scsicmd->scsi, &scsicmd->block, NULL );
- /* Remove from list of commands and drop list's reference */
- list_del ( &scsicmd->list );
+ /* Drop list's reference */
scsicmd_put ( scsicmd );
}