On 11/18/2010 03:59 AM, Boaz Harrosh wrote:
On 11/18/2010 03:06 AM, Mike Christie wrote:
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.
Mike if you are on this. Do you think we need the _irqsave locking.
I always thought that the network receive is not on the HW interrupt
but on a completion thread. Could you verify?
Yeah, we do not need the irqsave locking, because for software iscsi the
session lock is just locked in softirqs/timers and the iscsi xmit
thread. For offload and iser (be2iscsi, bnx2i, iser and cxgb*) we have
similar combinations (some drivers have a tasklet thrown in there too)
and no real interrupts.
qla4xxx does not use the iscsi_queuecommand function.
--
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