[SCSI] pm80xx: Fixed return value issue
authorViswas G <Viswas.G@pmcs.com>
Tue, 10 Dec 2013 05:01:38 +0000 (10:31 +0530)
committerJames Bottomley <JBottomley@Parallels.com>
Sat, 15 Mar 2014 17:17:47 +0000 (10:17 -0700)
pm80xx_get_gsm_dump() was returning "1" in error case
instead of negative error value.

Signed-off-by: Viswas G <Viswas.G@pmcs.com>
Reviewed-by: Jack Wang <jinpu.wang@profitbricks.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/pm8001/pm8001_ctl.c
drivers/scsi/pm8001/pm8001_hwi.c
drivers/scsi/pm8001/pm80xx_hwi.c

index 1738965..28b4e81 100644 (file)
@@ -452,7 +452,7 @@ static DEVICE_ATTR(iop_log, S_IRUGO, pm8001_ctl_iop_log_show, NULL);
 static ssize_t pm8001_ctl_fatal_log_show(struct device *cdev,
        struct device_attribute *attr, char *buf)
 {
-       u32 count;
+       ssize_t count;
 
        count = pm80xx_get_fatal_dump(cdev, attr, buf);
        return count;
@@ -470,7 +470,7 @@ static DEVICE_ATTR(fatal_log, S_IRUGO, pm8001_ctl_fatal_log_show, NULL);
 static ssize_t pm8001_ctl_gsm_log_show(struct device *cdev,
        struct device_attribute *attr, char *buf)
 {
-       u32 count;
+       ssize_t count;
 
        count = pm8001_get_gsm_dump(cdev, SYSFS_OFFSET, buf);
        return count;
index 2aa0681..46ace52 100644 (file)
@@ -5020,7 +5020,7 @@ pm8001_get_gsm_dump(struct device *cdev, u32 length, char *buf)
        /* check max is 1 Mbytes */
        if ((length > 0x100000) || (gsm_dump_offset & 3) ||
                ((gsm_dump_offset + length) > 0x1000000))
-                       return 1;
+                       return -EINVAL;
 
        if (pm8001_ha->chip_id == chip_8001)
                bar = 2;
@@ -5048,12 +5048,12 @@ pm8001_get_gsm_dump(struct device *cdev, u32 length, char *buf)
                                gsm_base = GSM_BASE;
                                if (-1 == pm8001_bar4_shift(pm8001_ha,
                                                (gsm_base + shift_value)))
-                                       return 1;
+                                       return -EIO;
                        } else {
                                gsm_base = 0;
                                if (-1 == pm80xx_bar4_shift(pm8001_ha,
                                                (gsm_base + shift_value)))
-                                       return 1;
+                                       return -EIO;
                        }
                        gsm_dump_offset = (gsm_dump_offset + offset) &
                                                0xFFFF0000;
@@ -5073,7 +5073,7 @@ pm8001_get_gsm_dump(struct device *cdev, u32 length, char *buf)
        }
        /* Shift back to BAR4 original address */
        if (-1 == pm8001_bar4_shift(pm8001_ha, 0))
-                       return 1;
+                       return -EIO;
        pm8001_ha->fatal_forensic_shift_offset += 1024;
 
        if (pm8001_ha->fatal_forensic_shift_offset >= 0x100000)
index c950dc5..9b54142 100644 (file)
@@ -91,7 +91,6 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
        struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost);
        struct pm8001_hba_info *pm8001_ha = sha->lldd_ha;
        void __iomem *fatal_table_address = pm8001_ha->fatal_tbl_addr;
-       u32 status = 1;
        u32 accum_len , reg_val, index, *temp;
        unsigned long start;
        u8 *direct_data;
@@ -111,13 +110,10 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
                direct_data = (u8 *)fatal_error_data;
                pm8001_ha->forensic_info.data_type = TYPE_NON_FATAL;
                pm8001_ha->forensic_info.data_buf.direct_len = SYSFS_OFFSET;
-               pm8001_ha->forensic_info.data_buf.direct_offset = 0;
                pm8001_ha->forensic_info.data_buf.read_len = 0;
 
                pm8001_ha->forensic_info.data_buf.direct_data = direct_data;
-       }
 
-       if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) {
                /* start to get data */
                /* Program the MEMBASE II Shifting Register with 0x00.*/
                pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER,
@@ -126,6 +122,7 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
                pm8001_ha->forensic_fatal_step = 0;
                pm8001_ha->fatal_bar_loc = 0;
        }
+
        /* Read until accum_len is retrived */
        accum_len = pm8001_mr32(fatal_table_address,
                                MPI_FATAL_EDUMP_TABLE_ACCUM_LEN);
@@ -135,7 +132,7 @@ ssize_t pm80xx_get_fatal_dump(struct device *cdev,
                PM8001_IO_DBG(pm8001_ha,
                        pm8001_printk("Possible PCI issue 0x%x not expected\n",
                                accum_len));
-               return status;
+               return -EIO;
        }
        if (accum_len == 0 || accum_len >= 0x100000) {
                pm8001_ha->forensic_info.data_buf.direct_data +=
@@ -178,7 +175,6 @@ moreData:
                        pm8001_ha->forensic_fatal_step = 1;
                        pm8001_ha->fatal_forensic_shift_offset = 0;
                        pm8001_ha->forensic_last_offset = 0;
-                       status = 0;
                        return (char *)pm8001_ha->
                                forensic_info.data_buf.direct_data -
                                (char *)buf;
@@ -194,7 +190,6 @@ moreData:
                                        forensic_info.data_buf.direct_data,
                                        "%08x ", *(temp + index));
                        }
-                       status = 0;
                        return (char *)pm8001_ha->
                                forensic_info.data_buf.direct_data -
                                (char *)buf;
@@ -214,7 +209,6 @@ moreData:
                pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER,
                        pm8001_ha->fatal_forensic_shift_offset);
                pm8001_ha->fatal_bar_loc = 0;
-               status = 0;
                return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
                        (char *)buf;
        }
@@ -239,7 +233,7 @@ moreData:
                        PM8001_FAIL_DBG(pm8001_ha,
                        pm8001_printk("TIMEOUT:MEMBASE_II_SHIFT_REGISTER"
                        " = 0x%x\n", reg_val));
-                       return -1;
+                       return -EIO;
                }
 
                /* Read the next 64K of the debug data. */
@@ -259,7 +253,6 @@ moreData:
                        pm8001_ha->forensic_info.data_buf.direct_len =  0;
                        pm8001_ha->forensic_info.data_buf.direct_offset = 0;
                        pm8001_ha->forensic_info.data_buf.read_len = 0;
-                       status = 0;
                }
        }