[SCSI] lpfc: block target when port queueing limit is hit
authorMike Christie <michaelc@cs.wisc.edu>
Fri, 25 Feb 2011 20:04:28 +0000 (14:04 -0600)
committerJames Bottomley <James.Bottomley@suse.de>
Mon, 28 Feb 2011 17:21:53 +0000 (11:21 -0600)
Instead of blocking the entire host when the port's
queueing limit is hit, we should only block the port's
target. This will allow IO to other ports to execute.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Acked-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/lpfc/lpfc_scsi.c

index ff20abd..bf34178 100644 (file)
@@ -3062,7 +3062,7 @@ lpfc_queuecommand_lck(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
                goto out_fail_command;
        }
        if (atomic_read(&ndlp->cmd_pending) >= ndlp->cmd_qdepth)
-               goto out_host_busy;
+               goto out_tgt_busy;
 
        lpfc_cmd = lpfc_get_scsi_buf(phba, ndlp);
        if (lpfc_cmd == NULL) {
@@ -3179,6 +3179,9 @@ lpfc_queuecommand_lck(struct scsi_cmnd *cmnd, void (*done) (struct scsi_cmnd *))
  out_host_busy:
        return SCSI_MLQUEUE_HOST_BUSY;
 
+ out_tgt_busy:
+       return SCSI_MLQUEUE_TARGET_BUSY;
+
  out_fail_command:
        done(cmnd);
        return 0;