All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/11] hpsa updates
@ 2015-07-18 16:12 Don Brace
  2015-07-18 16:12 ` [PATCH 01/11] hpsa: Correct double unlock of mutex Don Brace
                   ` (10 more replies)
  0 siblings, 11 replies; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

These patches are based on Linus's tree

The changes are:
 - Static checker issues reported by Dan Carpenter
   - double unlock of a mutex
   - correct decode sense data decision
   - warnings on hpsa_init_one cleanup
 - Update PMC copyright
 - Cleanup update scsi devices
 - New controller ids.
 - Correct rmmod issue
 - Add in new path_info to show box and bay info
 - Driver supports mixed mode, RAID and HBA
 - New offline mode
 - Bug fix for multi lun devices from Shane Seymour

---

Don Brace (7):
      hpsa: Correct double unlock of mutex
      hpsa: correct decode sense data
      hpsa: correct static checker warnings on driver init cleanup
      hpsa: add PMC to copyright
      hpsa: cleanup update scsi devices
      hpsa: add in new controllers
      hpsa: fix rmmod issues

Joe Handzik (1):
      hpsa: add sysfs entry path_info to show box and bay information

Kevin Barnett (1):
      Change how controllers in mixed mode are handled.

Scott Benesh (1):
      hpsa: add in new offline mode

shane.seymour (1):
      hpsa: fix issues with multilun devices


 drivers/scsi/hpsa.c     |  286 +++++++++++++++++++++++++++++------------------
 drivers/scsi/hpsa.h     |   16 +--
 drivers/scsi/hpsa_cmd.h |   10 +-
 3 files changed, 188 insertions(+), 124 deletions(-)

--
Signature

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH 01/11] hpsa: Correct double unlock of mutex
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-22 15:16   ` Tomas Henzl
  2015-07-18 16:12 ` [PATCH 02/11] hpsa: correct decode sense data Don Brace
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 1dafeb4..1d5f4fd 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -2749,11 +2749,10 @@ static int hpsa_do_reset(struct ctlr_info *h, struct hpsa_scsi_dev_t *dev,
 			lockup_detected(h));
 
 	if (unlikely(lockup_detected(h))) {
-			dev_warn(&h->pdev->dev,
-				 "Controller lockup detected during reset wait\n");
-			mutex_unlock(&h->reset_mutex);
-			rc = -ENODEV;
-		}
+		dev_warn(&h->pdev->dev,
+			 "Controller lockup detected during reset wait\n");
+		rc = -ENODEV;
+	}
 
 	if (unlikely(rc))
 		atomic_set(&dev->reset_cmds_out, 0);


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 02/11] hpsa: correct decode sense data
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
  2015-07-18 16:12 ` [PATCH 01/11] hpsa: Correct double unlock of mutex Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-22 15:16   ` Tomas Henzl
  2015-07-18 16:12 ` [PATCH 03/11] hpsa: correct static checker warnings on driver init cleanup Don Brace
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 1d5f4fd..e9b2073 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -325,7 +325,7 @@ static int check_for_unit_attention(struct ctlr_info *h,
 
 	decode_sense_data(c->err_info->SenseInfo, sense_len,
 				&sense_key, &asc, &ascq);
-	if (sense_key != UNIT_ATTENTION || asc == -1)
+	if (sense_key != UNIT_ATTENTION || asc == 0xff)
 		return 0;
 
 	switch (asc) {


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 03/11] hpsa: correct static checker warnings on driver init cleanup
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
  2015-07-18 16:12 ` [PATCH 01/11] hpsa: Correct double unlock of mutex Don Brace
  2015-07-18 16:12 ` [PATCH 02/11] hpsa: correct decode sense data Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-22 15:16   ` Tomas Henzl
  2015-07-18 16:12 ` [PATCH 04/11] hpsa: add PMC to copyright Don Brace
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |    4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index e9b2073..6b083af 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -8053,7 +8053,7 @@ reinit_after_soft_reset:
 		rc = hpsa_kdump_soft_reset(h);
 		if (rc)
 			/* Neither hard nor soft reset worked, we're hosed. */
-			goto clean9;
+			goto clean7;
 
 		dev_info(&h->pdev->dev, "Board READY.\n");
 		dev_info(&h->pdev->dev,
@@ -8099,8 +8099,6 @@ reinit_after_soft_reset:
 				h->heartbeat_sample_interval);
 	return 0;
 
-clean9: /* wq, sh, perf, sg, cmd, irq, shost, pci, lu, aer/h */
-	kfree(h->hba_inquiry_data);
 clean7: /* perf, sg, cmd, irq, shost, pci, lu, aer/h */
 	hpsa_free_performant_mode(h);
 	h->access.set_intr_mask(h, HPSA_INTR_OFF);


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 04/11] hpsa: add PMC to copyright
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (2 preceding siblings ...)
  2015-07-18 16:12 ` [PATCH 03/11] hpsa: correct static checker warnings on driver init cleanup Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-18 16:12 ` [PATCH 05/11] hpsa: add sysfs entry path_info to show box and bay information Don Brace
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

need to add PMC to copyright notice and update the Hewlett-Packard
copyright notification.

Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Justin Lindley <justin.lindley@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c     |    9 +++------
 drivers/scsi/hpsa.h     |    9 +++------
 drivers/scsi/hpsa_cmd.h |    9 +++------
 3 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 6b083af..eaa35bd 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -1,6 +1,7 @@
 /*
  *    Disk Array driver for HP Smart Array SAS controllers
- *    Copyright 2000, 2014 Hewlett-Packard Development Company, L.P.
+ *    Copyright 2014-2015 PMC-Sierra, Inc.
+ *    Copyright 2000,2009-2015 Hewlett-Packard Development Company, L.P.
  *
  *    This program is free software; you can redistribute it and/or modify
  *    it under the terms of the GNU General Public License as published by
@@ -11,11 +12,7 @@
  *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  *    NON INFRINGEMENT.  See the GNU General Public License for more details.
  *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *    Questions/Comments/Bugfixes to iss_storagedev@hp.com
+ *    Questions/Comments/Bugfixes to storagedev@pmcs.com
  *
  */
 
diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
index 6ee4da6..6f6084b 100644
--- a/drivers/scsi/hpsa.h
+++ b/drivers/scsi/hpsa.h
@@ -1,6 +1,7 @@
 /*
  *    Disk Array driver for HP Smart Array SAS controllers
- *    Copyright 2000, 2014 Hewlett-Packard Development Company, L.P.
+ *    Copyright 2014-2015 PMC-Sierra, Inc.
+ *    Copyright 2000,2009-2015 Hewlett-Packard Development Company, L.P.
  *
  *    This program is free software; you can redistribute it and/or modify
  *    it under the terms of the GNU General Public License as published by
@@ -11,11 +12,7 @@
  *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  *    NON INFRINGEMENT.  See the GNU General Public License for more details.
  *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *    Questions/Comments/Bugfixes to iss_storagedev@hp.com
+ *    Questions/Comments/Bugfixes to storagedev@pmcs.com
  *
  */
 #ifndef HPSA_H
diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h
index c601622..1a98bbe 100644
--- a/drivers/scsi/hpsa_cmd.h
+++ b/drivers/scsi/hpsa_cmd.h
@@ -1,6 +1,7 @@
 /*
  *    Disk Array driver for HP Smart Array SAS controllers
- *    Copyright 2000, 2014 Hewlett-Packard Development Company, L.P.
+ *    Copyright 2014-2015 PMC-Sierra, Inc.
+ *    Copyright 2000,2009-2015 Hewlett-Packard Development Company, L.P.
  *
  *    This program is free software; you can redistribute it and/or modify
  *    it under the terms of the GNU General Public License as published by
@@ -11,11 +12,7 @@
  *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  *    NON INFRINGEMENT.  See the GNU General Public License for more details.
  *
- *    You should have received a copy of the GNU General Public License
- *    along with this program; if not, write to the Free Software
- *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *    Questions/Comments/Bugfixes to iss_storagedev@hp.com
+ *    Questions/Comments/Bugfixes to storagedev@pmcs.com
  *
  */
 #ifndef HPSA_CMD_H


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 05/11] hpsa: add sysfs entry path_info to show box and bay information
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (3 preceding siblings ...)
  2015-07-18 16:12 ` [PATCH 04/11] hpsa: add PMC to copyright Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-22 15:18   ` Tomas Henzl
  2015-07-18 16:12 ` [PATCH 06/11] hpsa: cleanup update scsi devices Don Brace
                   ` (5 subsequent siblings)
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

From: Joe Handzik <joseph.t.handzik@hp.com>

host no, bus, target, lun, scsi_device_type
for hba mode add: box and bay information

report if the path is active/inactive

Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |  122 +++++++++++++++++++++++++++++++++++++++++++++++++++
 drivers/scsi/hpsa.h |    5 ++
 2 files changed, 127 insertions(+)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index eaa35bd..f64a2c7 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -264,6 +264,7 @@ static int hpsa_scsi_ioaccel_queue_command(struct ctlr_info *h,
 static void hpsa_command_resubmit_worker(struct work_struct *work);
 static u32 lockup_detected(struct ctlr_info *h);
 static int detect_controller_lockup(struct ctlr_info *h);
+static int is_ext_target(struct ctlr_info *h, struct hpsa_scsi_dev_t *device);
 
 static inline struct ctlr_info *sdev_to_hba(struct scsi_device *sdev)
 {
@@ -714,12 +715,106 @@ static ssize_t host_show_hp_ssd_smart_path_enabled(struct device *dev,
 	return snprintf(buf, 20, "%d\n", offload_enabled);
 }
 
+#define MAX_PATHS 8
+#define PATH_STRING_LEN 50
+
+static ssize_t path_info_show(struct device *dev,
+	     struct device_attribute *attr, char *buf)
+{
+	struct ctlr_info *h;
+	struct scsi_device *sdev;
+	struct hpsa_scsi_dev_t *hdev;
+	unsigned long flags;
+	int i;
+	int output_len = 0;
+	u8 box;
+	u8 bay;
+	u8 path_map_index = 0;
+	char *active;
+	unsigned char phys_connector[2];
+	unsigned char path[MAX_PATHS][PATH_STRING_LEN];
+
+	memset(path, 0, MAX_PATHS * PATH_STRING_LEN);
+	sdev = to_scsi_device(dev);
+	h = sdev_to_hba(sdev);
+	spin_lock_irqsave(&h->devlock, flags);
+	hdev = sdev->hostdata;
+	if (!hdev) {
+		spin_unlock_irqrestore(&h->devlock, flags);
+		return -ENODEV;
+	}
+
+	bay = hdev->bay;
+	for (i = 0; i < MAX_PATHS; i++) {
+		path_map_index = 1<<i;
+		if (i == hdev->active_path_index)
+			active = "Active";
+		else if (hdev->path_map & path_map_index)
+			active = "Inactive";
+		else
+			continue;
+
+		output_len = snprintf(path[i],
+				PATH_STRING_LEN, "[%d:%d:%d:%d] %20.20s ",
+				h->scsi_host->host_no,
+				hdev->bus, hdev->target, hdev->lun,
+				scsi_device_type(hdev->devtype));
+
+		if (is_ext_target(h, hdev) ||
+			(hdev->devtype == TYPE_RAID) ||
+			is_logical_dev_addr_mode(hdev->scsi3addr)) {
+			output_len += snprintf(path[i] + output_len,
+						PATH_STRING_LEN, "%s\n",
+						active);
+			continue;
+		}
+
+		box = hdev->box[i];
+		memcpy(&phys_connector, &hdev->phys_connector[i],
+			sizeof(phys_connector));
+		if (phys_connector[0] < '0')
+			phys_connector[0] = '0';
+		if (phys_connector[1] < '0')
+			phys_connector[1] = '0';
+		if (hdev->phys_connector[i] > 0)
+			output_len += snprintf(path[i] + output_len,
+				PATH_STRING_LEN,
+				"PORT: %.2s ",
+				phys_connector);
+		if (hdev->devtype == TYPE_DISK && h->hba_mode_enabled) {
+			if (box == 0 || box == 0xFF) {
+				output_len += snprintf(path[i] + output_len,
+					PATH_STRING_LEN,
+					"BAY: %hhu %s\n",
+					bay, active);
+			} else {
+				output_len += snprintf(path[i] + output_len,
+					PATH_STRING_LEN,
+					"BOX: %hhu BAY: %hhu %s\n",
+					box, bay, active);
+			}
+		} else if (box != 0 && box != 0xFF) {
+			output_len += snprintf(path[i] + output_len,
+				PATH_STRING_LEN, "BOX: %hhu %s\n",
+				box, active);
+		} else
+			output_len += snprintf(path[i] + output_len,
+				PATH_STRING_LEN, "%s\n", active);
+	}
+
+	spin_unlock_irqrestore(&h->devlock, flags);
+	return snprintf(buf, output_len+1, "%s%s%s%s%s%s%s%s",
+		path[0], path[1], path[2], path[3],
+		path[4], path[5], path[6], path[7]);
+}
+
 static DEVICE_ATTR(raid_level, S_IRUGO, raid_level_show, NULL);
 static DEVICE_ATTR(lunid, S_IRUGO, lunid_show, NULL);
 static DEVICE_ATTR(unique_id, S_IRUGO, unique_id_show, NULL);
 static DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan);
 static DEVICE_ATTR(hp_ssd_smart_path_enabled, S_IRUGO,
 			host_show_hp_ssd_smart_path_enabled, NULL);
+static DEVICE_ATTR(path_info, S_IRUGO, path_info_show, NULL);
 static DEVICE_ATTR(hp_ssd_smart_path_status, S_IWUSR|S_IRUGO|S_IROTH,
 		host_show_hp_ssd_smart_path_status,
 		host_store_hp_ssd_smart_path_status);
@@ -741,6 +836,7 @@ static struct device_attribute *hpsa_sdev_attrs[] = {
 	&dev_attr_lunid,
 	&dev_attr_unique_id,
 	&dev_attr_hp_ssd_smart_path_enabled,
+	&dev_attr_path_info,
 	&dev_attr_lockup_detected,
 	NULL,
 };
@@ -3611,6 +3707,31 @@ static void hpsa_get_ioaccel_drive_info(struct ctlr_info *h,
 	atomic_set(&dev->reset_cmds_out, 0);
 }
 
+static void hpsa_get_path_info(struct hpsa_scsi_dev_t *this_device,
+	u8 *lunaddrbytes,
+	struct bmic_identify_physical_device *id_phys)
+{
+	if (PHYS_IOACCEL(lunaddrbytes)
+		&& this_device->ioaccel_handle)
+		this_device->hba_ioaccel_enabled = 1;
+
+	memcpy(&this_device->active_path_index,
+		&id_phys->active_path_number,
+		sizeof(this_device->active_path_index));
+	memcpy(&this_device->path_map,
+		&id_phys->redundant_path_present_map,
+		sizeof(this_device->path_map));
+	memcpy(&this_device->box,
+		&id_phys->alternate_paths_phys_box_on_port,
+		sizeof(this_device->box));
+	memcpy(&this_device->phys_connector,
+		&id_phys->alternate_paths_phys_connector,
+		sizeof(this_device->phys_connector));
+	memcpy(&this_device->bay,
+		&id_phys->phys_bay_in_box,
+		sizeof(this_device->bay));
+}
+
 static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 {
 	/* the idea here is we could get notified
@@ -3771,6 +3892,7 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 
 			hpsa_get_ioaccel_drive_info(h, this_device,
 						lunaddrbytes, id_phys);
+			hpsa_get_path_info(this_device, lunaddrbytes, id_phys);
 			atomic_set(&this_device->ioaccel_cmds_out, 0);
 			ncurrent++;
 			break;
diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
index 6f6084b..ab014d3 100644
--- a/drivers/scsi/hpsa.h
+++ b/drivers/scsi/hpsa.h
@@ -50,6 +50,11 @@ struct hpsa_scsi_dev_t {
 					 * device via "ioaccel" path.
 					 */
 	u32 ioaccel_handle;
+	u8 active_path_index;
+	u8 path_map;
+	u8 bay;
+	u8 box[8];
+	u16 phys_connector[8];
 	int offload_config;		/* I/O accel RAID offload configured */
 	int offload_enabled;		/* I/O accel RAID offload enabled */
 	int offload_to_be_enabled;


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 06/11] hpsa: cleanup update scsi devices
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (4 preceding siblings ...)
  2015-07-18 16:12 ` [PATCH 05/11] hpsa: add sysfs entry path_info to show box and bay information Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-22 15:19   ` Tomas Henzl
  2015-07-18 16:12 ` [PATCH 07/11] hpsa: add in new controllers Don Brace
                   ` (4 subsequent siblings)
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

showing that tables have been updated unnecessarily.

Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index f64a2c7..f34978d 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -1379,8 +1379,9 @@ static inline int device_updated(struct hpsa_scsi_dev_t *dev1,
 		return 1;
 	if (dev1->offload_enabled != dev2->offload_enabled)
 		return 1;
-	if (dev1->queue_depth != dev2->queue_depth)
-		return 1;
+	if (!is_logical_dev_addr_mode(dev1->scsi3addr))
+		if (dev1->queue_depth != dev2->queue_depth)
+			return 1;
 	return 0;
 }
 
@@ -3889,7 +3890,6 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 			else if (!(h->transMethod & CFGTBL_Trans_io_accel1 ||
 				h->transMethod & CFGTBL_Trans_io_accel2))
 				break;
-
 			hpsa_get_ioaccel_drive_info(h, this_device,
 						lunaddrbytes, id_phys);
 			hpsa_get_path_info(this_device, lunaddrbytes, id_phys);


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 07/11] hpsa: add in new controllers
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (5 preceding siblings ...)
  2015-07-18 16:12 ` [PATCH 06/11] hpsa: cleanup update scsi devices Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-22 15:19   ` Tomas Henzl
  2015-07-18 16:12 ` [PATCH 08/11] Change how controllers in mixed mode are handled Don Brace
                   ` (3 subsequent siblings)
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index f34978d..20c29e5 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -129,6 +129,11 @@ static const struct pci_device_id hpsa_pci_device_id[] = {
 	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CD},
 	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CE},
 	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0580},
+	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0581},
+	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0582},
+	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0583},
+	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0584},
+	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0585},
 	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0076},
 	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0087},
 	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x007D},
@@ -187,6 +192,11 @@ static struct board_type products[] = {
 	{0x21CD103C, "Smart Array", &SA5_access},
 	{0x21CE103C, "Smart HBA", &SA5_access},
 	{0x05809005, "SmartHBA-SA", &SA5_access},
+	{0x05819005, "SmartHBA-SA 8i", &SA5_access},
+	{0x05829005, "SmartHBA-SA 8i8e", &SA5_access},
+	{0x05839005, "SmartHBA-SA 8e", &SA5_access},
+	{0x05849005, "SmartHBA-SA 16i", &SA5_access},
+	{0x05859005, "SmartHBA-SA 4i4e", &SA5_access},
 	{0x00761590, "HP Storage P1224 Array Controller", &SA5_access},
 	{0x00871590, "HP Storage P1224e Array Controller", &SA5_access},
 	{0x007D1590, "HP Storage P1228 Array Controller", &SA5_access},


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 08/11] Change how controllers in mixed mode are handled.
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (6 preceding siblings ...)
  2015-07-18 16:12 ` [PATCH 07/11] hpsa: add in new controllers Don Brace
@ 2015-07-18 16:12 ` Don Brace
  2015-07-18 16:13 ` [PATCH 09/11] hpsa: add in new offline mode Don Brace
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:12 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

From: Kevin Barnett <kevin.barnett@pmcs.com>

Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |   97 ++++++---------------------------------------------
 drivers/scsi/hpsa.h |    2 -
 2 files changed, 11 insertions(+), 88 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index 20c29e5..df85f89 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -791,7 +791,8 @@ static ssize_t path_info_show(struct device *dev,
 				PATH_STRING_LEN,
 				"PORT: %.2s ",
 				phys_connector);
-		if (hdev->devtype == TYPE_DISK && h->hba_mode_enabled) {
+		if (hdev->devtype == TYPE_DISK &&
+			hdev->expose_state != HPSA_DO_NOT_EXPOSE) {
 			if (box == 0 || box == 0xFF) {
 				output_len += snprintf(path[i] + output_len,
 					PATH_STRING_LEN,
@@ -2689,34 +2690,6 @@ out:
 	return rc;
 }
 
-static int hpsa_bmic_ctrl_mode_sense(struct ctlr_info *h,
-		unsigned char *scsi3addr, unsigned char page,
-		struct bmic_controller_parameters *buf, size_t bufsize)
-{
-	int rc = IO_OK;
-	struct CommandList *c;
-	struct ErrorInfo *ei;
-
-	c = cmd_alloc(h);
-	if (fill_cmd(c, BMIC_SENSE_CONTROLLER_PARAMETERS, h, buf, bufsize,
-			page, scsi3addr, TYPE_CMD)) {
-		rc = -1;
-		goto out;
-	}
-	rc = hpsa_scsi_do_simple_cmd_with_retry(h, c,
-			PCI_DMA_FROMDEVICE, NO_TIMEOUT);
-	if (rc)
-		goto out;
-	ei = c->err_info;
-	if (ei->CommandStatus != 0 && ei->CommandStatus != CMD_DATA_UNDERRUN) {
-		hpsa_scsi_interpret_error(h, c);
-		rc = -1;
-	}
-out:
-	cmd_free(h, c);
-	return rc;
-}
-
 static int hpsa_send_reset(struct ctlr_info *h, unsigned char *scsi3addr,
 	u8 reset_type, int reply_queue)
 {
@@ -3665,29 +3638,6 @@ static u8 *figure_lunaddrbytes(struct ctlr_info *h, int raid_ctlr_position,
 	return NULL;
 }
 
-static int hpsa_hba_mode_enabled(struct ctlr_info *h)
-{
-	int rc;
-	int hba_mode_enabled;
-	struct bmic_controller_parameters *ctlr_params;
-	ctlr_params = kzalloc(sizeof(struct bmic_controller_parameters),
-		GFP_KERNEL);
-
-	if (!ctlr_params)
-		return -ENOMEM;
-	rc = hpsa_bmic_ctrl_mode_sense(h, RAID_CTLR_LUNID, 0, ctlr_params,
-		sizeof(struct bmic_controller_parameters));
-	if (rc) {
-		kfree(ctlr_params);
-		return rc;
-	}
-
-	hba_mode_enabled =
-		((ctlr_params->nvram_flags & HBA_MODE_ENABLED_FLAG) != 0);
-	kfree(ctlr_params);
-	return hba_mode_enabled;
-}
-
 /* get physical drive ioaccel handle and queue depth */
 static void hpsa_get_ioaccel_drive_info(struct ctlr_info *h,
 		struct hpsa_scsi_dev_t *dev,
@@ -3765,7 +3715,6 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 	int ncurrent = 0;
 	int i, n_ext_target_devs, ndevs_to_allocate;
 	int raid_ctlr_position;
-	int rescan_hba_mode;
 	DECLARE_BITMAP(lunzerobits, MAX_EXT_TARGETS);
 
 	currentsd = kzalloc(sizeof(*currentsd) * HPSA_MAX_DEVICES, GFP_KERNEL);
@@ -3781,17 +3730,6 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 	}
 	memset(lunzerobits, 0, sizeof(lunzerobits));
 
-	rescan_hba_mode = hpsa_hba_mode_enabled(h);
-	if (rescan_hba_mode < 0)
-		goto out;
-
-	if (!h->hba_mode_enabled && rescan_hba_mode)
-		dev_warn(&h->pdev->dev, "HBA mode enabled\n");
-	else if (h->hba_mode_enabled && !rescan_hba_mode)
-		dev_warn(&h->pdev->dev, "HBA mode disabled\n");
-
-	h->hba_mode_enabled = rescan_hba_mode;
-
 	if (hpsa_gather_lun_info(h, physdev_list, &nphysicals,
 			logdev_list, &nlogicals))
 		goto out;
@@ -3867,9 +3805,6 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 		/* do not expose masked devices */
 		if (MASKED_DEVICE(lunaddrbytes) &&
 			i < nphysicals + (raid_ctlr_position == 0)) {
-			if (h->hba_mode_enabled)
-				dev_warn(&h->pdev->dev,
-					"Masked physical device detected\n");
 			this_device->expose_state = HPSA_DO_NOT_EXPOSE;
 		} else {
 			this_device->expose_state =
@@ -3889,30 +3824,21 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
 				ncurrent++;
 			break;
 		case TYPE_DISK:
-			if (i >= nphysicals) {
-				ncurrent++;
-				break;
-			}
-
-			if (h->hba_mode_enabled)
-				/* never use raid mapper in HBA mode */
+			if (i < nphysicals + (raid_ctlr_position == 0)) {
+				/* The disk is in HBA mode. */
+				/* Never use RAID mapper in HBA mode. */
 				this_device->offload_enabled = 0;
-			else if (!(h->transMethod & CFGTBL_Trans_io_accel1 ||
-				h->transMethod & CFGTBL_Trans_io_accel2))
-				break;
-			hpsa_get_ioaccel_drive_info(h, this_device,
-						lunaddrbytes, id_phys);
-			hpsa_get_path_info(this_device, lunaddrbytes, id_phys);
-			atomic_set(&this_device->ioaccel_cmds_out, 0);
+				hpsa_get_ioaccel_drive_info(h, this_device,
+					lunaddrbytes, id_phys);
+				hpsa_get_path_info(this_device, lunaddrbytes,
+							id_phys);
+			}
 			ncurrent++;
 			break;
 		case TYPE_TAPE:
 		case TYPE_MEDIUM_CHANGER:
-			ncurrent++;
-			break;
 		case TYPE_ENCLOSURE:
-			if (h->hba_mode_enabled)
-				ncurrent++;
+			ncurrent++;
 			break;
 		case TYPE_RAID:
 			/* Only present the Smartarray HBA as a RAID controller.
@@ -8117,7 +8043,6 @@ reinit_after_soft_reset:
 
 	pci_set_drvdata(pdev, h);
 	h->ndevices = 0;
-	h->hba_mode_enabled = 0;
 
 	spin_lock_init(&h->devlock);
 	rc = hpsa_put_ctlr_into_performant_mode(h);
diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
index ab014d3..27debb3 100644
--- a/drivers/scsi/hpsa.h
+++ b/drivers/scsi/hpsa.h
@@ -116,7 +116,6 @@ struct bmic_controller_parameters {
 	u8   automatic_drive_slamming;
 	u8   reserved1;
 	u8   nvram_flags;
-#define HBA_MODE_ENABLED_FLAG (1 << 3)
 	u8   cache_nvram_flags;
 	u8   drive_config_flags;
 	u16  reserved2;
@@ -155,7 +154,6 @@ struct ctlr_info {
 	unsigned int msi_vector;
 	int intr_mode; /* either PERF_MODE_INT or SIMPLE_MODE_INT */
 	struct access_method access;
-	char hba_mode_enabled;
 
 	/* queue and queue Info */
 	unsigned int Qdepth;


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 09/11] hpsa: add in new offline mode
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (7 preceding siblings ...)
  2015-07-18 16:12 ` [PATCH 08/11] Change how controllers in mixed mode are handled Don Brace
@ 2015-07-18 16:13 ` Don Brace
  2015-07-22 15:19   ` Tomas Henzl
  2015-07-18 16:13 ` [PATCH 10/11] hpsa: fix issues with multilun devices Don Brace
  2015-07-18 16:13 ` [PATCH 11/11] hpsa: fix rmmod issues Don Brace
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:13 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

From: Scott Benesh <scott.benesh@pmcs.com>

prevent adding volumes that are not available.

Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Reviewed-by: Justin Lindley <justin.lindley@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c     |   15 +++++++++++----
 drivers/scsi/hpsa_cmd.h |    1 +
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index df85f89..c72e900 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -1481,17 +1481,23 @@ static void hpsa_show_volume_status(struct ctlr_info *h,
 			h->scsi_host->host_no,
 			sd->bus, sd->target, sd->lun);
 		break;
+	case HPSA_LV_NOT_AVAILABLE:
+		dev_info(&h->pdev->dev,
+			"C%d:B%d:T%d:L%d Volume is waiting for transforming volume.\n",
+			h->scsi_host->host_no,
+			sd->bus, sd->target, sd->lun);
+		break;
 	case HPSA_LV_UNDERGOING_RPI:
 		dev_info(&h->pdev->dev,
-			"C%d:B%d:T%d:L%d Volume is undergoing rapid parity initialization process.\n",
+			"C%d:B%d:T%d:L%d Volume is undergoing rapid parity init.\n",
 			h->scsi_host->host_no,
 			sd->bus, sd->target, sd->lun);
 		break;
 	case HPSA_LV_PENDING_RPI:
 		dev_info(&h->pdev->dev,
-				"C%d:B%d:T%d:L%d Volume is queued for rapid parity initialization process.\n",
-				h->scsi_host->host_no,
-				sd->bus, sd->target, sd->lun);
+			"C%d:B%d:T%d:L%d Volume is queued for rapid parity initialization process.\n",
+			h->scsi_host->host_no,
+			sd->bus, sd->target, sd->lun);
 		break;
 	case HPSA_LV_ENCRYPTED_NO_KEY:
 		dev_info(&h->pdev->dev,
@@ -3262,6 +3268,7 @@ static int hpsa_volume_offline(struct ctlr_info *h,
 	/* Keep volume offline in certain cases: */
 	switch (ldstat) {
 	case HPSA_LV_UNDERGOING_ERASE:
+	case HPSA_LV_NOT_AVAILABLE:
 	case HPSA_LV_UNDERGOING_RPI:
 	case HPSA_LV_PENDING_RPI:
 	case HPSA_LV_ENCRYPTED_NO_KEY:
diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h
index 1a98bbe..47c756b 100644
--- a/drivers/scsi/hpsa_cmd.h
+++ b/drivers/scsi/hpsa_cmd.h
@@ -164,6 +164,7 @@
 /* Logical volume states */
 #define HPSA_VPD_LV_STATUS_UNSUPPORTED			0xff
 #define HPSA_LV_OK                                      0x0
+#define HPSA_LV_NOT_AVAILABLE				0x0b
 #define HPSA_LV_UNDERGOING_ERASE			0x0F
 #define HPSA_LV_UNDERGOING_RPI				0x12
 #define HPSA_LV_PENDING_RPI				0x13


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 10/11] hpsa: fix issues with multilun devices
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (8 preceding siblings ...)
  2015-07-18 16:13 ` [PATCH 09/11] hpsa: add in new offline mode Don Brace
@ 2015-07-18 16:13 ` Don Brace
  2015-07-22 15:19   ` Tomas Henzl
  2015-07-18 16:13 ` [PATCH 11/11] hpsa: fix rmmod issues Don Brace
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:13 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

From: shane.seymour <shane.seymour@hp.com>

A regression was introduced into the hpsa driver a while back so
non-zero LUNs of multi-LUN devices may no longer be presented via
a SAS based Smart Array. I have not done a bisection to discover
the change that caused it.

The CISS firmware specification (available on sourceforge)
defines an 8 byte lunid that describes devices that the Smart
Array can see/present to the system. The current code in the hpsa
driver attempts to find matches for non-zero LUNs with LUN 0 for
a bus/target by zeroing out byte 4 of the lunid and find a match.

This method is sufficient for SCSI based Smart Arrays because
byte 5 is always 0. For SAS based Smart arrays byte 5 of the
lunid contains the path number for a multipath device and
either one or two bits (the documentation does not define how
many bits are used but it appears it may be one only) that
indicate if the given path number in byte 5 must always be
used to access that device. Byte 5 may not always be zero.

The following are lunids (spaces added for clarity) for a
MSL2024 single drive library connected via a H241 Smart Array:

00 00 00 00 01 00 00 01 (changer)
00 00 00 00 00 80 00 01 (tape)

In the 4th byte (counting from 0) you can see that the tape
is LUN 0 and the changer is LUN 1. The 0x80 set in the 5th byte
for the tape drive means the driver should force access to
path 0 (the library in this case was connected to one path only
anyway).

After the changes we can see the following in the dmesg output:

scsi 0:3:0:0: RAID              HP       H241             1.18 \
PQ: 0 ANSI: 5
scsi 0:2:0:0: Sequential-Access HP       Ultrium 6-SCSI   354W \
PQ: 0 ANSI: 6
scsi 0:2:0:1: Medium Changer    HP       MSL G3 Series    8.70 \
PQ: 0 ANSI: 5

Showing that the changer is correctly identified as LUN 1 of
bus 2 target 0. Before the change the changer device is not seen.

Suggested-by: shane.seymour <shane.seymour@hp.com>
Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index c72e900..a3077e9 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -1187,17 +1187,19 @@ static int hpsa_scsi_add_entry(struct ctlr_info *h, int hostno,
 
 	/* This is a non-zero lun of a multi-lun device.
 	 * Search through our list and find the device which
-	 * has the same 8 byte LUN address, excepting byte 4.
+	 * has the same 8 byte LUN address, excepting byte 4 and 5.
 	 * Assign the same bus and target for this new LUN.
 	 * Use the logical unit number from the firmware.
 	 */
 	memcpy(addr1, device->scsi3addr, 8);
 	addr1[4] = 0;
+	addr1[5] = 0;
 	for (i = 0; i < n; i++) {
 		sd = h->dev[i];
 		memcpy(addr2, sd->scsi3addr, 8);
 		addr2[4] = 0;
-		/* differ only in byte 4? */
+		addr2[5] = 0;
+		/* differ only in byte 4 and 5? */
 		if (memcmp(addr1, addr2, 8) == 0) {
 			device->bus = sd->bus;
 			device->target = sd->target;


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH 11/11] hpsa: fix rmmod issues
  2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
                   ` (9 preceding siblings ...)
  2015-07-18 16:13 ` [PATCH 10/11] hpsa: fix issues with multilun devices Don Brace
@ 2015-07-18 16:13 ` Don Brace
  2015-07-22 15:20   ` Tomas Henzl
  10 siblings, 1 reply; 21+ messages in thread
From: Don Brace @ 2015-07-18 16:13 UTC (permalink / raw)
  To: scott.teel, Kevin.Barnett, james.bottomley, hch, Justin.Lindley, elliott
  Cc: linux-scsi

The driver is calling hpsa_shutdown before calling scsi_remove_host.
hpsa_shutdown is disabling interrupts.

scsi_remove_host can trigger I/O operations, such as
SYNCHRONIZE CACHE when multipath is enabled which hang the system.

Call scsi_remove_host before calling hpsa_shutdown.

Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
Reviewed-by: Scott Teel <scott.teel@pmcs.com>
Signed-off-by: Don Brace <don.brace@pmcs.com>
---
 drivers/scsi/hpsa.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index a3077e9..0f8acfb 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -8269,6 +8269,14 @@ static void hpsa_remove_one(struct pci_dev *pdev)
 	destroy_workqueue(h->rescan_ctlr_wq);
 	destroy_workqueue(h->resubmit_wq);
 
+	/*
+	 * Call before disabling interrupts.
+	 * scsi_remove_host can trigger I/O operations especially
+	 * when multipath is enabled. There can be SYNCHRONIZE CACHE
+	 * operations which cannot complete and will hang the system.
+	 */
+	if (h->scsi_host)
+		scsi_remove_host(h->scsi_host);		/* init_one 8 */
 	/* includes hpsa_free_irqs - init_one 4 */
 	/* includes hpsa_disable_interrupt_mode - pci_init 2 */
 	hpsa_shutdown(pdev);
@@ -8277,8 +8285,6 @@ static void hpsa_remove_one(struct pci_dev *pdev)
 
 	kfree(h->hba_inquiry_data);			/* init_one 10 */
 	h->hba_inquiry_data = NULL;			/* init_one 10 */
-	if (h->scsi_host)
-		scsi_remove_host(h->scsi_host);		/* init_one 8 */
 	hpsa_free_ioaccel2_sg_chain_blocks(h);
 	hpsa_free_performant_mode(h);			/* init_one 7 */
 	hpsa_free_sg_chain_blocks(h);			/* init_one 6 */


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH 01/11] hpsa: Correct double unlock of mutex
  2015-07-18 16:12 ` [PATCH 01/11] hpsa: Correct double unlock of mutex Don Brace
@ 2015-07-22 15:16   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:16 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:12, Don Brace wrote:
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas
> ---
>  drivers/scsi/hpsa.c |    9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index 1dafeb4..1d5f4fd 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -2749,11 +2749,10 @@ static int hpsa_do_reset(struct ctlr_info *h, struct hpsa_scsi_dev_t *dev,
>  			lockup_detected(h));
>  
>  	if (unlikely(lockup_detected(h))) {
> -			dev_warn(&h->pdev->dev,
> -				 "Controller lockup detected during reset wait\n");
> -			mutex_unlock(&h->reset_mutex);
> -			rc = -ENODEV;
> -		}
> +		dev_warn(&h->pdev->dev,
> +			 "Controller lockup detected during reset wait\n");
> +		rc = -ENODEV;
> +	}
>  
>  	if (unlikely(rc))
>  		atomic_set(&dev->reset_cmds_out, 0);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 02/11] hpsa: correct decode sense data
  2015-07-18 16:12 ` [PATCH 02/11] hpsa: correct decode sense data Don Brace
@ 2015-07-22 15:16   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:16 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:12, Don Brace wrote:
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>

Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

> ---
>  drivers/scsi/hpsa.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index 1d5f4fd..e9b2073 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -325,7 +325,7 @@ static int check_for_unit_attention(struct ctlr_info *h,
>  
>  	decode_sense_data(c->err_info->SenseInfo, sense_len,
>  				&sense_key, &asc, &ascq);
> -	if (sense_key != UNIT_ATTENTION || asc == -1)
> +	if (sense_key != UNIT_ATTENTION || asc == 0xff)
>  		return 0;
>  
>  	switch (asc) {
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 03/11] hpsa: correct static checker warnings on driver init cleanup
  2015-07-18 16:12 ` [PATCH 03/11] hpsa: correct static checker warnings on driver init cleanup Don Brace
@ 2015-07-22 15:16   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:16 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:12, Don Brace wrote:
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

> ---
>  drivers/scsi/hpsa.c |    4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index e9b2073..6b083af 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -8053,7 +8053,7 @@ reinit_after_soft_reset:
>  		rc = hpsa_kdump_soft_reset(h);
>  		if (rc)
>  			/* Neither hard nor soft reset worked, we're hosed. */
> -			goto clean9;
> +			goto clean7;
>  
>  		dev_info(&h->pdev->dev, "Board READY.\n");
>  		dev_info(&h->pdev->dev,
> @@ -8099,8 +8099,6 @@ reinit_after_soft_reset:
>  				h->heartbeat_sample_interval);
>  	return 0;
>  
> -clean9: /* wq, sh, perf, sg, cmd, irq, shost, pci, lu, aer/h */
> -	kfree(h->hba_inquiry_data);
>  clean7: /* perf, sg, cmd, irq, shost, pci, lu, aer/h */
>  	hpsa_free_performant_mode(h);
>  	h->access.set_intr_mask(h, HPSA_INTR_OFF);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 05/11] hpsa: add sysfs entry path_info to show box and bay information
  2015-07-18 16:12 ` [PATCH 05/11] hpsa: add sysfs entry path_info to show box and bay information Don Brace
@ 2015-07-22 15:18   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:18 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:12, Don Brace wrote:
> From: Joe Handzik <joseph.t.handzik@hp.com>
> 
> host no, bus, target, lun, scsi_device_type
> for hba mode add: box and bay information
> 
> report if the path is active/inactive
> 
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

> ---
>  drivers/scsi/hpsa.c |  122 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  drivers/scsi/hpsa.h |    5 ++
>  2 files changed, 127 insertions(+)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index eaa35bd..f64a2c7 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -264,6 +264,7 @@ static int hpsa_scsi_ioaccel_queue_command(struct ctlr_info *h,
>  static void hpsa_command_resubmit_worker(struct work_struct *work);
>  static u32 lockup_detected(struct ctlr_info *h);
>  static int detect_controller_lockup(struct ctlr_info *h);
> +static int is_ext_target(struct ctlr_info *h, struct hpsa_scsi_dev_t *device);
>  
>  static inline struct ctlr_info *sdev_to_hba(struct scsi_device *sdev)
>  {
> @@ -714,12 +715,106 @@ static ssize_t host_show_hp_ssd_smart_path_enabled(struct device *dev,
>  	return snprintf(buf, 20, "%d\n", offload_enabled);
>  }
>  
> +#define MAX_PATHS 8
> +#define PATH_STRING_LEN 50
> +
> +static ssize_t path_info_show(struct device *dev,
> +	     struct device_attribute *attr, char *buf)
> +{
> +	struct ctlr_info *h;
> +	struct scsi_device *sdev;
> +	struct hpsa_scsi_dev_t *hdev;
> +	unsigned long flags;
> +	int i;
> +	int output_len = 0;
> +	u8 box;
> +	u8 bay;
> +	u8 path_map_index = 0;
> +	char *active;
> +	unsigned char phys_connector[2];
> +	unsigned char path[MAX_PATHS][PATH_STRING_LEN];
> +
> +	memset(path, 0, MAX_PATHS * PATH_STRING_LEN);
> +	sdev = to_scsi_device(dev);
> +	h = sdev_to_hba(sdev);
> +	spin_lock_irqsave(&h->devlock, flags);
> +	hdev = sdev->hostdata;
> +	if (!hdev) {
> +		spin_unlock_irqrestore(&h->devlock, flags);
> +		return -ENODEV;
> +	}
> +
> +	bay = hdev->bay;
> +	for (i = 0; i < MAX_PATHS; i++) {
> +		path_map_index = 1<<i;
> +		if (i == hdev->active_path_index)
> +			active = "Active";
> +		else if (hdev->path_map & path_map_index)
> +			active = "Inactive";
> +		else
> +			continue;
> +
> +		output_len = snprintf(path[i],
> +				PATH_STRING_LEN, "[%d:%d:%d:%d] %20.20s ",
> +				h->scsi_host->host_no,
> +				hdev->bus, hdev->target, hdev->lun,
> +				scsi_device_type(hdev->devtype));
> +
> +		if (is_ext_target(h, hdev) ||
> +			(hdev->devtype == TYPE_RAID) ||
> +			is_logical_dev_addr_mode(hdev->scsi3addr)) {
> +			output_len += snprintf(path[i] + output_len,
> +						PATH_STRING_LEN, "%s\n",
> +						active);
> +			continue;
> +		}
> +
> +		box = hdev->box[i];
> +		memcpy(&phys_connector, &hdev->phys_connector[i],
> +			sizeof(phys_connector));
> +		if (phys_connector[0] < '0')
> +			phys_connector[0] = '0';
> +		if (phys_connector[1] < '0')
> +			phys_connector[1] = '0';
> +		if (hdev->phys_connector[i] > 0)
> +			output_len += snprintf(path[i] + output_len,
> +				PATH_STRING_LEN,
> +				"PORT: %.2s ",
> +				phys_connector);
> +		if (hdev->devtype == TYPE_DISK && h->hba_mode_enabled) {
> +			if (box == 0 || box == 0xFF) {
> +				output_len += snprintf(path[i] + output_len,
> +					PATH_STRING_LEN,
> +					"BAY: %hhu %s\n",
> +					bay, active);
> +			} else {
> +				output_len += snprintf(path[i] + output_len,
> +					PATH_STRING_LEN,
> +					"BOX: %hhu BAY: %hhu %s\n",
> +					box, bay, active);
> +			}
> +		} else if (box != 0 && box != 0xFF) {
> +			output_len += snprintf(path[i] + output_len,
> +				PATH_STRING_LEN, "BOX: %hhu %s\n",
> +				box, active);
> +		} else
> +			output_len += snprintf(path[i] + output_len,
> +				PATH_STRING_LEN, "%s\n", active);
> +	}
> +
> +	spin_unlock_irqrestore(&h->devlock, flags);
> +	return snprintf(buf, output_len+1, "%s%s%s%s%s%s%s%s",
> +		path[0], path[1], path[2], path[3],
> +		path[4], path[5], path[6], path[7]);
> +}
> +
>  static DEVICE_ATTR(raid_level, S_IRUGO, raid_level_show, NULL);
>  static DEVICE_ATTR(lunid, S_IRUGO, lunid_show, NULL);
>  static DEVICE_ATTR(unique_id, S_IRUGO, unique_id_show, NULL);
>  static DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan);
>  static DEVICE_ATTR(hp_ssd_smart_path_enabled, S_IRUGO,
>  			host_show_hp_ssd_smart_path_enabled, NULL);
> +static DEVICE_ATTR(path_info, S_IRUGO, path_info_show, NULL);
>  static DEVICE_ATTR(hp_ssd_smart_path_status, S_IWUSR|S_IRUGO|S_IROTH,
>  		host_show_hp_ssd_smart_path_status,
>  		host_store_hp_ssd_smart_path_status);
> @@ -741,6 +836,7 @@ static struct device_attribute *hpsa_sdev_attrs[] = {
>  	&dev_attr_lunid,
>  	&dev_attr_unique_id,
>  	&dev_attr_hp_ssd_smart_path_enabled,
> +	&dev_attr_path_info,
>  	&dev_attr_lockup_detected,
>  	NULL,
>  };
> @@ -3611,6 +3707,31 @@ static void hpsa_get_ioaccel_drive_info(struct ctlr_info *h,
>  	atomic_set(&dev->reset_cmds_out, 0);
>  }
>  
> +static void hpsa_get_path_info(struct hpsa_scsi_dev_t *this_device,
> +	u8 *lunaddrbytes,
> +	struct bmic_identify_physical_device *id_phys)
> +{
> +	if (PHYS_IOACCEL(lunaddrbytes)
> +		&& this_device->ioaccel_handle)
> +		this_device->hba_ioaccel_enabled = 1;
> +
> +	memcpy(&this_device->active_path_index,
> +		&id_phys->active_path_number,
> +		sizeof(this_device->active_path_index));
> +	memcpy(&this_device->path_map,
> +		&id_phys->redundant_path_present_map,
> +		sizeof(this_device->path_map));
> +	memcpy(&this_device->box,
> +		&id_phys->alternate_paths_phys_box_on_port,
> +		sizeof(this_device->box));
> +	memcpy(&this_device->phys_connector,
> +		&id_phys->alternate_paths_phys_connector,
> +		sizeof(this_device->phys_connector));
> +	memcpy(&this_device->bay,
> +		&id_phys->phys_bay_in_box,
> +		sizeof(this_device->bay));
> +}
> +
>  static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
>  {
>  	/* the idea here is we could get notified
> @@ -3771,6 +3892,7 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
>  
>  			hpsa_get_ioaccel_drive_info(h, this_device,
>  						lunaddrbytes, id_phys);
> +			hpsa_get_path_info(this_device, lunaddrbytes, id_phys);
>  			atomic_set(&this_device->ioaccel_cmds_out, 0);
>  			ncurrent++;
>  			break;
> diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h
> index 6f6084b..ab014d3 100644
> --- a/drivers/scsi/hpsa.h
> +++ b/drivers/scsi/hpsa.h
> @@ -50,6 +50,11 @@ struct hpsa_scsi_dev_t {
>  					 * device via "ioaccel" path.
>  					 */
>  	u32 ioaccel_handle;
> +	u8 active_path_index;
> +	u8 path_map;
> +	u8 bay;
> +	u8 box[8];
> +	u16 phys_connector[8];
>  	int offload_config;		/* I/O accel RAID offload configured */
>  	int offload_enabled;		/* I/O accel RAID offload enabled */
>  	int offload_to_be_enabled;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 06/11] hpsa: cleanup update scsi devices
  2015-07-18 16:12 ` [PATCH 06/11] hpsa: cleanup update scsi devices Don Brace
@ 2015-07-22 15:19   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:19 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:12, Don Brace wrote:
> showing that tables have been updated unnecessarily.
> 
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

> ---
>  drivers/scsi/hpsa.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index f64a2c7..f34978d 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -1379,8 +1379,9 @@ static inline int device_updated(struct hpsa_scsi_dev_t *dev1,
>  		return 1;
>  	if (dev1->offload_enabled != dev2->offload_enabled)
>  		return 1;
> -	if (dev1->queue_depth != dev2->queue_depth)
> -		return 1;
> +	if (!is_logical_dev_addr_mode(dev1->scsi3addr))
> +		if (dev1->queue_depth != dev2->queue_depth)
> +			return 1;
>  	return 0;
>  }
>  
> @@ -3889,7 +3890,6 @@ static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno)
>  			else if (!(h->transMethod & CFGTBL_Trans_io_accel1 ||
>  				h->transMethod & CFGTBL_Trans_io_accel2))
>  				break;
> -
>  			hpsa_get_ioaccel_drive_info(h, this_device,
>  						lunaddrbytes, id_phys);
>  			hpsa_get_path_info(this_device, lunaddrbytes, id_phys);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 07/11] hpsa: add in new controllers
  2015-07-18 16:12 ` [PATCH 07/11] hpsa: add in new controllers Don Brace
@ 2015-07-22 15:19   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:19 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:12, Don Brace wrote:
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

> ---
>  drivers/scsi/hpsa.c |   10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index f34978d..20c29e5 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -129,6 +129,11 @@ static const struct pci_device_id hpsa_pci_device_id[] = {
>  	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CD},
>  	{PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSI,     0x103C, 0x21CE},
>  	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0580},
> +	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0581},
> +	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0582},
> +	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0583},
> +	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0584},
> +	{PCI_VENDOR_ID_ADAPTEC2, 0x0290, 0x9005, 0x0585},
>  	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0076},
>  	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x0087},
>  	{PCI_VENDOR_ID_HP_3PAR, 0x0075, 0x1590, 0x007D},
> @@ -187,6 +192,11 @@ static struct board_type products[] = {
>  	{0x21CD103C, "Smart Array", &SA5_access},
>  	{0x21CE103C, "Smart HBA", &SA5_access},
>  	{0x05809005, "SmartHBA-SA", &SA5_access},
> +	{0x05819005, "SmartHBA-SA 8i", &SA5_access},
> +	{0x05829005, "SmartHBA-SA 8i8e", &SA5_access},
> +	{0x05839005, "SmartHBA-SA 8e", &SA5_access},
> +	{0x05849005, "SmartHBA-SA 16i", &SA5_access},
> +	{0x05859005, "SmartHBA-SA 4i4e", &SA5_access},
>  	{0x00761590, "HP Storage P1224 Array Controller", &SA5_access},
>  	{0x00871590, "HP Storage P1224e Array Controller", &SA5_access},
>  	{0x007D1590, "HP Storage P1228 Array Controller", &SA5_access},
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 09/11] hpsa: add in new offline mode
  2015-07-18 16:13 ` [PATCH 09/11] hpsa: add in new offline mode Don Brace
@ 2015-07-22 15:19   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:19 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:13, Don Brace wrote:
> From: Scott Benesh <scott.benesh@pmcs.com>
> 
> prevent adding volumes that are not available.
> 
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Reviewed-by: Justin Lindley <justin.lindley@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas

> ---
>  drivers/scsi/hpsa.c     |   15 +++++++++++----
>  drivers/scsi/hpsa_cmd.h |    1 +
>  2 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> index df85f89..c72e900 100644
> --- a/drivers/scsi/hpsa.c
> +++ b/drivers/scsi/hpsa.c
> @@ -1481,17 +1481,23 @@ static void hpsa_show_volume_status(struct ctlr_info *h,
>  			h->scsi_host->host_no,
>  			sd->bus, sd->target, sd->lun);
>  		break;
> +	case HPSA_LV_NOT_AVAILABLE:
> +		dev_info(&h->pdev->dev,
> +			"C%d:B%d:T%d:L%d Volume is waiting for transforming volume.\n",
> +			h->scsi_host->host_no,
> +			sd->bus, sd->target, sd->lun);
> +		break;
>  	case HPSA_LV_UNDERGOING_RPI:
>  		dev_info(&h->pdev->dev,
> -			"C%d:B%d:T%d:L%d Volume is undergoing rapid parity initialization process.\n",
> +			"C%d:B%d:T%d:L%d Volume is undergoing rapid parity init.\n",
>  			h->scsi_host->host_no,
>  			sd->bus, sd->target, sd->lun);
>  		break;
>  	case HPSA_LV_PENDING_RPI:
>  		dev_info(&h->pdev->dev,
> -				"C%d:B%d:T%d:L%d Volume is queued for rapid parity initialization process.\n",
> -				h->scsi_host->host_no,
> -				sd->bus, sd->target, sd->lun);
> +			"C%d:B%d:T%d:L%d Volume is queued for rapid parity initialization process.\n",
> +			h->scsi_host->host_no,
> +			sd->bus, sd->target, sd->lun);
>  		break;
>  	case HPSA_LV_ENCRYPTED_NO_KEY:
>  		dev_info(&h->pdev->dev,
> @@ -3262,6 +3268,7 @@ static int hpsa_volume_offline(struct ctlr_info *h,
>  	/* Keep volume offline in certain cases: */
>  	switch (ldstat) {
>  	case HPSA_LV_UNDERGOING_ERASE:
> +	case HPSA_LV_NOT_AVAILABLE:
>  	case HPSA_LV_UNDERGOING_RPI:
>  	case HPSA_LV_PENDING_RPI:
>  	case HPSA_LV_ENCRYPTED_NO_KEY:
> diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h
> index 1a98bbe..47c756b 100644
> --- a/drivers/scsi/hpsa_cmd.h
> +++ b/drivers/scsi/hpsa_cmd.h
> @@ -164,6 +164,7 @@
>  /* Logical volume states */
>  #define HPSA_VPD_LV_STATUS_UNSUPPORTED			0xff
>  #define HPSA_LV_OK                                      0x0
> +#define HPSA_LV_NOT_AVAILABLE				0x0b
>  #define HPSA_LV_UNDERGOING_ERASE			0x0F
>  #define HPSA_LV_UNDERGOING_RPI				0x12
>  #define HPSA_LV_PENDING_RPI				0x13
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 10/11] hpsa: fix issues with multilun devices
  2015-07-18 16:13 ` [PATCH 10/11] hpsa: fix issues with multilun devices Don Brace
@ 2015-07-22 15:19   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:19 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:13, Don Brace wrote:
> From: shane.seymour <shane.seymour@hp.com>
> 
> A regression was introduced into the hpsa driver a while back so
> non-zero LUNs of multi-LUN devices may no longer be presented via
> a SAS based Smart Array. I have not done a bisection to discover
> the change that caused it.
> 
> The CISS firmware specification (available on sourceforge)
> defines an 8 byte lunid that describes devices that the Smart
> Array can see/present to the system. The current code in the hpsa
> driver attempts to find matches for non-zero LUNs with LUN 0 for
> a bus/target by zeroing out byte 4 of the lunid and find a match.
> 
> This method is sufficient for SCSI based Smart Arrays because
> byte 5 is always 0. For SAS based Smart arrays byte 5 of the
> lunid contains the path number for a multipath device and
> either one or two bits (the documentation does not define how
> many bits are used but it appears it may be one only) that
> indicate if the given path number in byte 5 must always be
> used to access that device. Byte 5 may not always be zero.
> 
> The following are lunids (spaces added for clarity) for a
> MSL2024 single drive library connected via a H241 Smart Array:
> 
> 00 00 00 00 01 00 00 01 (changer)
> 00 00 00 00 00 80 00 01 (tape)
> 
> In the 4th byte (counting from 0) you can see that the tape
> is LUN 0 and the changer is LUN 1. The 0x80 set in the 5th byte
> for the tape drive means the driver should force access to
> path 0 (the library in this case was connected to one path only
> anyway).
> 
> After the changes we can see the following in the dmesg output:
> 
> scsi 0:3:0:0: RAID              HP       H241             1.18 \
> PQ: 0 ANSI: 5
> scsi 0:2:0:0: Sequential-Access HP       Ultrium 6-SCSI   354W \
> PQ: 0 ANSI: 6
> scsi 0:2:0:1: Medium Changer    HP       MSL G3 Series    8.70 \
> PQ: 0 ANSI: 5
> 
> Showing that the changer is correctly identified as LUN 1 of
> bus 2 target 0. Before the change the changer device is not seen.
> 
> Suggested-by: shane.seymour <shane.seymour@hp.com>
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH 11/11] hpsa: fix rmmod issues
  2015-07-18 16:13 ` [PATCH 11/11] hpsa: fix rmmod issues Don Brace
@ 2015-07-22 15:20   ` Tomas Henzl
  0 siblings, 0 replies; 21+ messages in thread
From: Tomas Henzl @ 2015-07-22 15:20 UTC (permalink / raw)
  To: Don Brace, scott.teel, Kevin.Barnett, james.bottomley, hch,
	Justin.Lindley, elliott
  Cc: linux-scsi

On 18.7.2015 18:13, Don Brace wrote:
> The driver is calling hpsa_shutdown before calling scsi_remove_host.
> hpsa_shutdown is disabling interrupts.
> 
> scsi_remove_host can trigger I/O operations, such as
> SYNCHRONIZE CACHE when multipath is enabled which hang the system.
> 
> Call scsi_remove_host before calling hpsa_shutdown.
> 
> Reviewed-by: Kevin Barnett <kevin.barnett@pmcs.com>
> Reviewed-by: Scott Teel <scott.teel@pmcs.com>
> Signed-off-by: Don Brace <don.brace@pmcs.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>

Tomas


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2015-07-22 15:20 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-18 16:12 [PATCH 00/11] hpsa updates Don Brace
2015-07-18 16:12 ` [PATCH 01/11] hpsa: Correct double unlock of mutex Don Brace
2015-07-22 15:16   ` Tomas Henzl
2015-07-18 16:12 ` [PATCH 02/11] hpsa: correct decode sense data Don Brace
2015-07-22 15:16   ` Tomas Henzl
2015-07-18 16:12 ` [PATCH 03/11] hpsa: correct static checker warnings on driver init cleanup Don Brace
2015-07-22 15:16   ` Tomas Henzl
2015-07-18 16:12 ` [PATCH 04/11] hpsa: add PMC to copyright Don Brace
2015-07-18 16:12 ` [PATCH 05/11] hpsa: add sysfs entry path_info to show box and bay information Don Brace
2015-07-22 15:18   ` Tomas Henzl
2015-07-18 16:12 ` [PATCH 06/11] hpsa: cleanup update scsi devices Don Brace
2015-07-22 15:19   ` Tomas Henzl
2015-07-18 16:12 ` [PATCH 07/11] hpsa: add in new controllers Don Brace
2015-07-22 15:19   ` Tomas Henzl
2015-07-18 16:12 ` [PATCH 08/11] Change how controllers in mixed mode are handled Don Brace
2015-07-18 16:13 ` [PATCH 09/11] hpsa: add in new offline mode Don Brace
2015-07-22 15:19   ` Tomas Henzl
2015-07-18 16:13 ` [PATCH 10/11] hpsa: fix issues with multilun devices Don Brace
2015-07-22 15:19   ` Tomas Henzl
2015-07-18 16:13 ` [PATCH 11/11] hpsa: fix rmmod issues Don Brace
2015-07-22 15:20   ` Tomas Henzl

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.