david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[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:
Michael Brown 2017-03-26 11:21:14 +03:00
parent c13bf52509
commit 6bc4a8ac91
1 changed files with 4 additions and 2 deletions

View File

@ -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 );
}