[SCSI] fcoe, libfc: fix an libfc issue with queue ramp down in libfc
authorVasu Dev <vasu.dev@intel.com>
Fri, 16 Oct 2009 00:46:55 +0000 (17:46 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 4 Dec 2009 18:00:43 +0000 (12:00 -0600)
The cmd_per_lun value is used by scsi-ml as fall back lowest
queue_depth value but in case of libfc cmd_per_lun is set to
same value as max queue_depth = 32.

So this patch reduces cmd_per_lun value to 3 and configures
each lun with default max queue_depth 32 in fc_slave_alloc.

Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Acked-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/fcoe/fcoe.c
drivers/scsi/libfc/fc_fcp.c

index aef29afb6e71df53348da622106b89d9e59fcf69..4efbc17a7d7fd9274e218bd27804601d4d4eae09 100644 (file)
@@ -137,7 +137,7 @@ static struct scsi_host_template fcoe_shost_template = {
        .change_queue_depth = fc_change_queue_depth,
        .change_queue_type = fc_change_queue_type,
        .this_id = -1,
-       .cmd_per_lun = 32,
+       .cmd_per_lun = 3,
        .can_queue = FCOE_MAX_OUTSTANDING_COMMANDS,
        .use_clustering = ENABLE_CLUSTERING,
        .sg_tablesize = SG_ALL,
index c0dc8e151c655c4eaffccbead3a0d09e4c95a641..48de805eb193247f53031ba7fb7d11ac72c9272d 100644 (file)
@@ -2033,18 +2033,16 @@ EXPORT_SYMBOL(fc_eh_host_reset);
 int fc_slave_alloc(struct scsi_device *sdev)
 {
        struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
-       int queue_depth;
 
        if (!rport || fc_remote_port_chkready(rport))
                return -ENXIO;
 
-       if (sdev->tagged_supported) {
-               if (sdev->host->hostt->cmd_per_lun)
-                       queue_depth = sdev->host->hostt->cmd_per_lun;
-               else
-                       queue_depth = FC_FCP_DFLT_QUEUE_DEPTH;
-               scsi_activate_tcq(sdev, queue_depth);
-       }
+       if (sdev->tagged_supported)
+               scsi_activate_tcq(sdev, FC_FCP_DFLT_QUEUE_DEPTH);
+       else
+               scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev),
+                                       FC_FCP_DFLT_QUEUE_DEPTH);
+
        return 0;
 }
 EXPORT_SYMBOL(fc_slave_alloc);