scsi: ipr: System crashes when seeing type 20 error
authorWen Xiong <wenxiong@linux.vnet.ibm.com>
Fri, 25 Jun 2021 02:11:25 +0000 (21:11 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 29 Jun 2021 20:46:08 +0000 (16:46 -0400)
Test team saw "4041: Incomplete multipath connection between enclosure and
device" when I/O drawers/drives have bad connections. System crashes when
handling these type 20 errors.

[    5.332452] ipr: 3/00-06-09: 4041: Incomplete multipath connection between enclosure and device
[    5.332460] ipr: 3/00-06-09: The IOA failed to detect an expected path to a device
[    5.332465] ipr: 3/00-06-09: Inactive path is failed: Resource Path=3/00-04-09
[    5.332471] ipr: 3/00-06-09: Functional IOA port: Resource Path=3/00-04, Link rate=unknown, WWN=5005076059C38E05
[    5.332478] ipr: 3/00-06-09: Incorrectly connected Device LUN: Resource Path=3/00-00-00-00-00-00-00-00-00-20-00-00-24-00-00-00-0, Link rate=unknown, WWN=0020000024000000
[    5.332487] ipr: 3/00-06-09: Path element=FF: Resource Path=3/50-05-07-60-45-56-5A-9C-00-00-00-00-00-00-00-00-0, Link rate=unknown WWN=0000000000000000
[    5.332492] ipr: 0000000054520EC8 00000000 00000000 4E532050
[    5.332495] ipr: 0000001045522054 49434B3D 00000050 278130E6
[    5.332498] ipr: 00000020033B5300 03282584 4C4D00E0 278039F3
[    5.332501] ipr: 00000030033B5180 03282404 4C4D00E0 276A0282
[    5.332504] ipr: 00000040033B5000 03281E04 447000E0 27697D19
[    5.332507] ipr: 00000050033B4E80 03281D84 447000E0 27690524
[    5.332509] ipr: 00000060033B4D00 03281C84 447000E0 27687FDA
[    5.332512] ipr: 00000070033B4B80 03281C04 447000E0 2767E787
[    5.332515] ipr: 00000080033B4A00 03281B04 447000E0 27674F0A

Link: https://lore.kernel.org/r/1624587085-10073-1-git-send-email-wenxiong@linux.vnet.ibm.com
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Wen Xiong <wenxiong@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ipr.c
drivers/scsi/ipr.h

index 30c30a1..5d78f7e 100644 (file)
@@ -1300,7 +1300,7 @@ static char *__ipr_format_res_path(u8 *res_path, char *buffer, int len)
 
        *p = '\0';
        p += scnprintf(p, buffer + len - p, "%02X", res_path[0]);
-       for (i = 1; res_path[i] != 0xff && ((i * 3) < len); i++)
+       for (i = 1; res_path[i] != 0xff && i < IPR_RES_PATH_BYTES; i++)
                p += scnprintf(p, buffer + len - p, "-%02X", res_path[i]);
 
        return buffer;
@@ -1323,7 +1323,7 @@ static char *ipr_format_res_path(struct ipr_ioa_cfg *ioa_cfg,
 
        *p = '\0';
        p += scnprintf(p, buffer + len - p, "%d/", ioa_cfg->host->host_no);
-       __ipr_format_res_path(res_path, p, len - (buffer - p));
+       __ipr_format_res_path(res_path, p, len - (p - buffer));
        return buffer;
 }
 
index 783ee03..69444d2 100644 (file)
@@ -428,6 +428,7 @@ struct ipr_config_table_entry64 {
        __be64 lun;
        __be64 lun_wwn[2];
 #define IPR_MAX_RES_PATH_LENGTH                48
+#define IPR_RES_PATH_BYTES             8
        __be64 res_path;
        struct ipr_std_inq_data std_inq_data;
        u8 reserved2[4];