hpsa: fix handling of hpsa_volume_offline return value
authorStephen M. Cameron <scameron@beardog.cce.hp.com>
Thu, 29 May 2014 15:54:25 +0000 (10:54 -0500)
committerChristoph Hellwig <hch@lst.de>
Mon, 2 Jun 2014 07:55:02 +0000 (09:55 +0200)
Make return value an int instead of an unsigned char so that
we do not lose negative error return values.

Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Reviewed-by: Webb Scales <webb.scales@hp.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/hpsa.c
drivers/scsi/hpsa_cmd.h

index af51e7d..31184b3 100644 (file)
@@ -2543,11 +2543,11 @@ exit_failed:
 /* Determine offline status of a volume.
  * Return either:
  *  0 (not offline)
- * -1 (offline for unknown reasons)
+ *  0xff (offline for unknown reasons)
  *  # (integer code indicating one of several NOT READY states
  *     describing why a volume is to be kept offline)
  */
-static unsigned char hpsa_volume_offline(struct ctlr_info *h,
+static int hpsa_volume_offline(struct ctlr_info *h,
                                        unsigned char scsi3addr[])
 {
        struct CommandList *c;
@@ -2646,11 +2646,15 @@ static int hpsa_update_device_info(struct ctlr_info *h,
 
        if (this_device->devtype == TYPE_DISK &&
                is_logical_dev_addr_mode(scsi3addr)) {
+               int volume_offline;
+
                hpsa_get_raid_level(h, scsi3addr, &this_device->raid_level);
                if (h->fw_support & MISC_FW_RAID_OFFLOAD_BASIC)
                        hpsa_get_ioaccel_status(h, scsi3addr, this_device);
-               this_device->volume_offline =
-                       hpsa_volume_offline(h, scsi3addr);
+               volume_offline = hpsa_volume_offline(h, scsi3addr);
+               if (volume_offline < 0 || volume_offline > 0xff)
+                       volume_offline = HPSA_VPD_LV_STATUS_UNSUPPORTED;
+               this_device->volume_offline = volume_offline & 0xff;
        } else {
                this_device->raid_level = RAID_UNKNOWN;
                this_device->offload_config = 0;
index 649b463..b5125dc 100644 (file)
 #define HPSA_VPD_HEADER_SZ              4
 
 /* Logical volume states */
-#define HPSA_VPD_LV_STATUS_UNSUPPORTED                 -1
+#define HPSA_VPD_LV_STATUS_UNSUPPORTED                 0xff
 #define HPSA_LV_OK                                      0x0
 #define HPSA_LV_UNDERGOING_ERASE                       0x0F
 #define HPSA_LV_UNDERGOING_RPI                         0x12