[SCSI] initialize max_target_blocked in scsi_alloc_target
authorEdward Goggin <egoggin@vmware.com>
Thu, 9 Apr 2009 17:02:22 +0000 (10:02 -0700)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 14 May 2009 21:17:46 +0000 (17:17 -0400)
This patch initializes the max_target_blocked field of a scsi target
structure so that a queuecommand return value of
SCSI_MLQUEUE_TARGET_BUSY will actually result in having the
scsi_queue_insert blocking the device queue before requeuing the
command and running the queue.  Otherwise, can and does cause livelock
on single CPU configurations if/when open-iSCSI software initiator's
command PDU window fills.

Signed-off-by: Ed Goggin <egoggin@vmware.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/scsi_scan.c

index 6f51ca4..e2b50d8 100644 (file)
@@ -425,6 +425,7 @@ static struct scsi_target *scsi_alloc_target(struct device *parent,
        INIT_LIST_HEAD(&starget->devices);
        starget->state = STARGET_CREATED;
        starget->scsi_level = SCSI_2;
+       starget->max_target_blocked = SCSI_DEFAULT_TARGET_BLOCKED;
  retry:
        spin_lock_irqsave(shost->host_lock, flags);