mirror of
https://github.com/ipxe/ipxe
synced 2025-12-19 19:49:45 +03:00
[scsi] Avoid duplicate call to scsicmd_close() on TEST UNIT READY failure
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>
This commit is contained in:
@@ -392,11 +392,13 @@ static void scsicmd_close ( struct scsi_command *scsicmd, int rc ) {
|
||||
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 );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user