On 11/17/2010 04:18 PM, Nicholas A. Bellinger wrote:
prepd_fault: sc->scsi_done = NULL;
- done(sc); - spin_lock(host->host_lock); + sc->scsi_done(sc); return 0;
This will NULL pointer. See a couple lines above where we NULL it. iscsi_free_task checks if the scsi_done pointer is set and if it is it will call scsi_done.
It is a hack to prevent the normal completion path from calling scsi_done. For the case where we return SCSI_MLQUEUE_TARGET_BUSY (the prepd_reject case) we need something to prevent scsi_done from getting called.
For the return 0/prepd_fault case we can just call sc->scsi_done, but we have to move some code around.
I do not like how the code does the NULLing and testing. Let me work on this and send a tested patch.
-- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html