svn commit: r350722 - stable/12/sys/cam
Alexander Motin
mav at FreeBSD.org
Thu Aug 8 02:08:10 UTC 2019
Author: mav
Date: Thu Aug 8 02:08:09 2019
New Revision: 350722
URL: https://svnweb.freebsd.org/changeset/base/350722
Log:
MFC r349283 (by scottl):
Refactor xpt_getattr() to make it more readable. No outwardly
visible functional changes, though code flow was modified a bit
internally to lessen the need for goto jumps and chained if
conditionals.
Modified:
stable/12/sys/cam/cam_xpt.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/cam/cam_xpt.c
==============================================================================
--- stable/12/sys/cam/cam_xpt.c Thu Aug 8 02:07:05 2019 (r350721)
+++ stable/12/sys/cam/cam_xpt.c Thu Aug 8 02:08:09 2019 (r350722)
@@ -1253,6 +1253,7 @@ xpt_getattr(char *buf, size_t len, const char *attr, s
{
int ret = -1, l, o;
struct ccb_dev_advinfo cdai;
+ struct scsi_vpd_device_id *did;
struct scsi_vpd_id_descriptor *idd;
xpt_path_assert(path, MA_OWNED);
@@ -1285,31 +1286,36 @@ xpt_getattr(char *buf, size_t len, const char *attr, s
cam_release_devq(cdai.ccb_h.path, 0, 0, 0, FALSE);
if (cdai.provsiz == 0)
goto out;
- if (cdai.buftype == CDAI_TYPE_SCSI_DEVID) {
+ switch(cdai.buftype) {
+ case CDAI_TYPE_SCSI_DEVID:
+ did = (struct scsi_vpd_device_id *)cdai.buf;
if (strcmp(attr, "GEOM::lunid") == 0) {
- idd = scsi_get_devid((struct scsi_vpd_device_id *)cdai.buf,
- cdai.provsiz, scsi_devid_is_lun_naa);
+ idd = scsi_get_devid(did, cdai.provsiz,
+ scsi_devid_is_lun_naa);
if (idd == NULL)
- idd = scsi_get_devid((struct scsi_vpd_device_id *)cdai.buf,
- cdai.provsiz, scsi_devid_is_lun_eui64);
+ idd = scsi_get_devid(did, cdai.provsiz,
+ scsi_devid_is_lun_eui64);
if (idd == NULL)
- idd = scsi_get_devid((struct scsi_vpd_device_id *)cdai.buf,
- cdai.provsiz, scsi_devid_is_lun_uuid);
+ idd = scsi_get_devid(did, cdai.provsiz,
+ scsi_devid_is_lun_uuid);
if (idd == NULL)
- idd = scsi_get_devid((struct scsi_vpd_device_id *)cdai.buf,
- cdai.provsiz, scsi_devid_is_lun_md5);
+ idd = scsi_get_devid(did, cdai.provsiz,
+ scsi_devid_is_lun_md5);
} else
idd = NULL;
+
if (idd == NULL)
- idd = scsi_get_devid((struct scsi_vpd_device_id *)cdai.buf,
- cdai.provsiz, scsi_devid_is_lun_t10);
+ idd = scsi_get_devid(did, cdai.provsiz,
+ scsi_devid_is_lun_t10);
if (idd == NULL)
- idd = scsi_get_devid((struct scsi_vpd_device_id *)cdai.buf,
- cdai.provsiz, scsi_devid_is_lun_name);
+ idd = scsi_get_devid(did, cdai.provsiz,
+ scsi_devid_is_lun_name);
if (idd == NULL)
- goto out;
+ break;
+
ret = 0;
- if ((idd->proto_codeset & SVPD_ID_CODESET_MASK) == SVPD_ID_CODESET_ASCII) {
+ if ((idd->proto_codeset & SVPD_ID_CODESET_MASK) ==
+ SVPD_ID_CODESET_ASCII) {
if (idd->length < len) {
for (l = 0; l < idd->length; l++)
buf[l] = idd->identifier[l] ?
@@ -1317,38 +1323,46 @@ xpt_getattr(char *buf, size_t len, const char *attr, s
buf[l] = 0;
} else
ret = EFAULT;
- } else if ((idd->proto_codeset & SVPD_ID_CODESET_MASK) == SVPD_ID_CODESET_UTF8) {
+ break;
+ }
+ if ((idd->proto_codeset & SVPD_ID_CODESET_MASK) ==
+ SVPD_ID_CODESET_UTF8) {
l = strnlen(idd->identifier, idd->length);
if (l < len) {
bcopy(idd->identifier, buf, l);
buf[l] = 0;
} else
ret = EFAULT;
- } else if ((idd->id_type & SVPD_ID_TYPE_MASK) == SVPD_ID_TYPE_UUID
- && idd->identifier[0] == 0x10) {
- if ((idd->length - 2) * 2 + 4 < len) {
- for (l = 2, o = 0; l < idd->length; l++) {
- if (l == 6 || l == 8 || l == 10 || l == 12)
- o += sprintf(buf + o, "-");
- o += sprintf(buf + o, "%02x",
- idd->identifier[l]);
- }
- } else
+ break;
+ }
+ if ((idd->id_type & SVPD_ID_TYPE_MASK) ==
+ SVPD_ID_TYPE_UUID && idd->identifier[0] == 0x10) {
+ if ((idd->length - 2) * 2 + 4 >= len) {
ret = EFAULT;
- } else {
- if (idd->length * 2 < len) {
- for (l = 0; l < idd->length; l++)
- sprintf(buf + l * 2, "%02x",
- idd->identifier[l]);
- } else
- ret = EFAULT;
+ break;
+ }
+ for (l = 2, o = 0; l < idd->length; l++) {
+ if (l == 6 || l == 8 || l == 10 || l == 12)
+ o += sprintf(buf + o, "-");
+ o += sprintf(buf + o, "%02x",
+ idd->identifier[l]);
+ }
+ break;
}
- } else {
+ if (idd->length * 2 < len) {
+ for (l = 0; l < idd->length; l++)
+ sprintf(buf + l * 2, "%02x",
+ idd->identifier[l]);
+ } else
+ ret = EFAULT;
+ break;
+ default:
if (cdai.provsiz < len) {
cdai.buf[cdai.provsiz] = 0;
ret = 0;
} else
ret = EFAULT;
+ break;
}
out:
More information about the svn-src-stable
mailing list