mirror of https://gitee.com/openkylin/linux.git
[SCSI] ipr: Improved dual adapter errors
Formats ipr dual adapter errors so that they are more compact. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
22d2e402d1
commit
8cf093e275
|
@ -952,6 +952,53 @@ static void ipr_process_ccn(struct ipr_cmnd *ipr_cmd)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* strip_and_pad_whitespace - Strip and pad trailing whitespace.
|
||||
* @i: index into buffer
|
||||
* @buf: string to modify
|
||||
*
|
||||
* This function will strip all trailing whitespace, pad the end
|
||||
* of the string with a single space, and NULL terminate the string.
|
||||
*
|
||||
* Return value:
|
||||
* new length of string
|
||||
**/
|
||||
static int strip_and_pad_whitespace(int i, char *buf)
|
||||
{
|
||||
while (i && buf[i] == ' ')
|
||||
i--;
|
||||
buf[i+1] = ' ';
|
||||
buf[i+2] = '\0';
|
||||
return i + 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_log_vpd_compact - Log the passed extended VPD compactly.
|
||||
* @prefix: string to print at start of printk
|
||||
* @hostrcb: hostrcb pointer
|
||||
* @vpd: vendor/product id/sn struct
|
||||
*
|
||||
* Return value:
|
||||
* none
|
||||
**/
|
||||
static void ipr_log_vpd_compact(char *prefix, struct ipr_hostrcb *hostrcb,
|
||||
struct ipr_vpd *vpd)
|
||||
{
|
||||
char buffer[IPR_VENDOR_ID_LEN + IPR_PROD_ID_LEN + IPR_SERIAL_NUM_LEN + 3];
|
||||
int i = 0;
|
||||
|
||||
memcpy(buffer, vpd->vpids.vendor_id, IPR_VENDOR_ID_LEN);
|
||||
i = strip_and_pad_whitespace(IPR_VENDOR_ID_LEN - 1, buffer);
|
||||
|
||||
memcpy(&buffer[i], vpd->vpids.product_id, IPR_PROD_ID_LEN);
|
||||
i = strip_and_pad_whitespace(i + IPR_PROD_ID_LEN - 1, buffer);
|
||||
|
||||
memcpy(&buffer[i], vpd->sn, IPR_SERIAL_NUM_LEN);
|
||||
buffer[IPR_SERIAL_NUM_LEN + i] = '\0';
|
||||
|
||||
ipr_hcam_err(hostrcb, "%s VPID/SN: %s\n", prefix, buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_log_vpd - Log the passed VPD to the error log.
|
||||
* @vpd: vendor/product id/sn struct
|
||||
|
@ -975,6 +1022,23 @@ static void ipr_log_vpd(struct ipr_vpd *vpd)
|
|||
ipr_err(" Serial Number: %s\n", buffer);
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_log_ext_vpd_compact - Log the passed extended VPD compactly.
|
||||
* @prefix: string to print at start of printk
|
||||
* @hostrcb: hostrcb pointer
|
||||
* @vpd: vendor/product id/sn/wwn struct
|
||||
*
|
||||
* Return value:
|
||||
* none
|
||||
**/
|
||||
static void ipr_log_ext_vpd_compact(char *prefix, struct ipr_hostrcb *hostrcb,
|
||||
struct ipr_ext_vpd *vpd)
|
||||
{
|
||||
ipr_log_vpd_compact(prefix, hostrcb, &vpd->vpd);
|
||||
ipr_hcam_err(hostrcb, "%s WWN: %08X%08X\n", prefix,
|
||||
be32_to_cpu(vpd->wwid[0]), be32_to_cpu(vpd->wwid[1]));
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_log_ext_vpd - Log the passed extended VPD to the error log.
|
||||
* @vpd: vendor/product id/sn/wwn struct
|
||||
|
@ -1289,10 +1353,11 @@ static void ipr_log_enhanced_dual_ioa_error(struct ipr_ioa_cfg *ioa_cfg,
|
|||
|
||||
error = &hostrcb->hcam.u.error.u.type_17_error;
|
||||
error->failure_reason[sizeof(error->failure_reason) - 1] = '\0';
|
||||
strstrip(error->failure_reason);
|
||||
|
||||
ipr_err("%s\n", error->failure_reason);
|
||||
ipr_err("Remote Adapter VPD:\n");
|
||||
ipr_log_ext_vpd(&error->vpd);
|
||||
ipr_hcam_err(hostrcb, "%s [PRC: %08X]\n", error->failure_reason,
|
||||
be32_to_cpu(hostrcb->hcam.u.error.prc));
|
||||
ipr_log_ext_vpd_compact("Remote IOA", hostrcb, &error->vpd);
|
||||
ipr_log_hex_data(ioa_cfg, error->data,
|
||||
be32_to_cpu(hostrcb->hcam.length) -
|
||||
(offsetof(struct ipr_hostrcb_error, u) +
|
||||
|
@ -1314,10 +1379,11 @@ static void ipr_log_dual_ioa_error(struct ipr_ioa_cfg *ioa_cfg,
|
|||
|
||||
error = &hostrcb->hcam.u.error.u.type_07_error;
|
||||
error->failure_reason[sizeof(error->failure_reason) - 1] = '\0';
|
||||
strstrip(error->failure_reason);
|
||||
|
||||
ipr_err("%s\n", error->failure_reason);
|
||||
ipr_err("Remote Adapter VPD:\n");
|
||||
ipr_log_vpd(&error->vpd);
|
||||
ipr_hcam_err(hostrcb, "%s [PRC: %08X]\n", error->failure_reason,
|
||||
be32_to_cpu(hostrcb->hcam.u.error.prc));
|
||||
ipr_log_vpd_compact("Remote IOA", hostrcb, &error->vpd);
|
||||
ipr_log_hex_data(ioa_cfg, error->data,
|
||||
be32_to_cpu(hostrcb->hcam.length) -
|
||||
(offsetof(struct ipr_hostrcb_error, u) +
|
||||
|
|
Loading…
Reference in New Issue