From ae07ce4d127be96bf3d19f77b2c7b879265c2d60 Mon Sep 17 00:00:00 2001 From: Don Brace Date: Fri, 24 Feb 2017 16:03:04 -0800 Subject: [PATCH] hpsa: correct queue depth for externals queue depth setting not in correct place, had no effect. Signed-off-by: Don Brace Orabug: 25605941 Signed-off-by: Jack Vogel --- drivers/scsi/hpsa.c | 31 ++++++++++++------------------- drivers/scsi/hpsa.h | 1 + 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index da3426029381..59729fe7d70a 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -2025,7 +2025,6 @@ static int hpsa_slave_alloc(struct scsi_device *sdev) struct hpsa_scsi_dev_t *sd = NULL; unsigned long flags; struct ctlr_info *h; - int queue_depth; h = sdev_to_hba(sdev); spin_lock_irqsave(&h->devlock, flags); @@ -2052,12 +2051,6 @@ static int hpsa_slave_alloc(struct scsi_device *sdev) sdev->hostdata = NULL; } - if (sd) - queue_depth = sd->queue_depth != 0 ? - sd->queue_depth : sdev->host->can_queue; - else - queue_depth = sdev->host->can_queue; - spin_unlock_irqrestore(&h->devlock, flags); return 0; @@ -2072,11 +2065,16 @@ static int hpsa_slave_configure(struct scsi_device *sdev) sd = sdev->hostdata; sdev->no_uld_attach = !sd || !sd->expose_device; - if (sd) - queue_depth = sd->queue_depth != 0 ? - sd->queue_depth : sdev->host->can_queue; - else + if (sd) { + if (sd->external) { + sd->queue_depth = EXTERNAL_QD; + } else { + queue_depth = sd->queue_depth != 0 ? + sd->queue_depth : sdev->host->can_queue; + } + } else { queue_depth = sdev->host->can_queue; + } scsi_change_queue_depth(sdev, queue_depth); @@ -3926,6 +3924,9 @@ static int hpsa_update_device_info(struct ctlr_info *h, this_device->queue_depth = h->nr_cmds; } + if (this_device->external) + this_device->queue_depth = EXTERNAL_QD; + if (is_OBDR_device) { /* See if this is a One-Button-Disaster-Recovery device * by looking for "$DR-10" at offset 43 in inquiry data. @@ -4134,14 +4135,6 @@ static void hpsa_get_ioaccel_drive_info(struct ctlr_info *h, int rc; struct ext_report_lun_entry *rle; - /* - * external targets don't support BMIC - */ - if (dev->external) { - dev->queue_depth = 7; - return; - } - rle = &rlep->LUN[rle_index]; dev->ioaccel_handle = rle->ioaccel_handle; diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h index 20c1b2298050..1858fa2b129e 100644 --- a/drivers/scsi/hpsa.h +++ b/drivers/scsi/hpsa.h @@ -57,6 +57,7 @@ struct hpsa_sas_phy { bool added_to_port; }; +#define EXTERNAL_QD 7 struct hpsa_scsi_dev_t { unsigned int devtype; int bus, target, lun; /* as presented to the OS */ -- 2.50.1