[SCSI] qla2xxx: Set host can_queue value based on available resources.
authorChad Dupuis <chad.dupuis@qlogic.com>
Wed, 26 Feb 2014 09:15:04 +0000 (04:15 -0500)
committerJames Bottomley <JBottomley@Parallels.com>
Sat, 15 Mar 2014 17:17:50 +0000 (10:17 -0700)
Tell the mid-layer that number of commands we can queue is the available
resources we have minus a small amount for internal commands.

Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla2xxx/qla_os.c

index c698e10e8aa790eb61414ead723b8d7ad839f503..925d45c9bee0cf881336480687895c5b6cc935d2 100644 (file)
@@ -2561,10 +2561,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
 
        host = base_vha->host;
        base_vha->req = req;
-       if (IS_QLAFX00(ha))
-               host->can_queue = QLAFX00_MAX_CANQUEUE;
-       else
-               host->can_queue = req->length + 128;
        if (IS_QLA2XXX_MIDTYPE(ha))
                base_vha->mgmt_svr_loop_id = 10 + base_vha->vp_idx;
        else
@@ -2587,11 +2583,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
                if (!IS_QLA82XX(ha))
                        host->sg_tablesize = QLA_SG_ALL;
        }
-       ql_dbg(ql_dbg_init, base_vha, 0x0032,
-           "can_queue=%d, req=%p, "
-           "mgmt_svr_loop_id=%d, sg_tablesize=%d.\n",
-           host->can_queue, base_vha->req,
-           base_vha->mgmt_svr_loop_id, host->sg_tablesize);
        host->max_id = ha->max_fibre_devices;
        host->cmd_per_lun = 3;
        host->unique_id = host->host_no;
@@ -2707,6 +2698,16 @@ que_init:
                goto probe_failed;
        }
 
+       if (IS_QLAFX00(ha))
+               host->can_queue = QLAFX00_MAX_CANQUEUE;
+       else
+               host->can_queue = req->num_outstanding_cmds - 10;
+
+       ql_dbg(ql_dbg_init, base_vha, 0x0032,
+           "can_queue=%d, req=%p, mgmt_svr_loop_id=%d, sg_tablesize=%d.\n",
+           host->can_queue, base_vha->req,
+           base_vha->mgmt_svr_loop_id, host->sg_tablesize);
+
        if (ha->mqenable) {
                if (qla25xx_setup_mode(base_vha)) {
                        ql_log(ql_log_warn, base_vha, 0x00ec,