mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 11:25:21 +01:00
mfiutil(8)/mrsasutil(8): display/parse enclosure by device ID (EID)
mfi_drive_name() built the "Exx:Syy" drive location string using struct mfi_pd_info's encl_index field, the enclosure's firmware- internal position index. Broadcom's own storcli/MegaCli tooling instead leads with the enclosure's Device ID (EID) in its primary drive listing; encl_index only shows up as "Position" in a detailed per-enclosure view. Both numbers are raw, unmodified firmware values already fetched into struct mfi_pd_info/mfi_pd_address, but only encl_index was ever displayed or accepted as input, leading to confusion when cross-referencing drive locations against storcli output. Switch mfi_drive_name() and mfi_lookup_drive() to use encl_device_id instead, aligning FreeBSD's enclosure numbering with Broadcom's own utilities. Since mrsasutil(8) is the same binary as mfiutil(8) under a different name, this applies to both mfi(4) and mrsas(4) alike. This is a user-visible behavior change: the numeric value of "xx" in "Exx:Syy" now differs from before for any enclosure whose EID and position index don't match, affecting anyone scripting against the previous numbering. PR: 294353 Reviewed by: imp Relnotes: yes Differential Revision: https://reviews.freebsd.org/D59654
This commit is contained in:
1 parent
32878e64e6
commit
acdb2cdcd6
2 files changed
+16
-8
No files matched your search
@@ -27,6 +27,15 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 16.x IS SLOW:
|
||||
world, or to merely disable the most expensive debugging functionality
|
||||
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||
|
||||
20260916:
|
||||
mfiutil(8)/mrsasutil(8) now display and parse the Exx:Syy drive
|
||||
location notation using the controller's enclosure device ID (EID)
|
||||
instead of its firmware-internal enclosure position index, aligning
|
||||
with Broadcom's storcli/MegaCli tooling. This changes the numeric
|
||||
value of "xx" for enclosures where the two differ; scripts relying
|
||||
on the previous numbering should be updated to use "show drives"
|
||||
output or storcli's EID column.
|
||||
|
||||
20260914:
|
||||
The size of multiple embedded structs have changed and may lead to
|
||||
problems (pci_error_handlers in pci_driver, dev_pm_info in struct device).
|
||||
|
||||
@@ -108,10 +108,10 @@ mfi_drive_name(struct mfi_pd_info *pinfo, uint16_t device_id, uint32_t def)
|
||||
pinfo->slot_number);
|
||||
else if (pinfo->encl_device_id == pinfo->ref.v.device_id)
|
||||
sbuf_printf(&sb, "E%u",
|
||||
pinfo->encl_index);
|
||||
pinfo->encl_device_id);
|
||||
else
|
||||
sbuf_printf(&sb, "E%u:S%u",
|
||||
pinfo->encl_index, pinfo->slot_number);
|
||||
pinfo->encl_device_id, pinfo->slot_number);
|
||||
}
|
||||
sbuf_finish(&sb);
|
||||
|
||||
@@ -156,7 +156,8 @@ mfi_lookup_drive(int fd, char *drive, uint16_t *device_id)
|
||||
int error;
|
||||
u_int i;
|
||||
char *cp;
|
||||
uint8_t encl, slot;
|
||||
uint16_t encl;
|
||||
uint8_t slot;
|
||||
|
||||
/* Look for a raw device id first. */
|
||||
val = strtol(drive, &cp, 0);
|
||||
@@ -175,14 +176,14 @@ mfi_lookup_drive(int fd, char *drive, uint16_t *device_id)
|
||||
if (toupper(drive[0]) == 'E') {
|
||||
cp++; /* Eat 'E' */
|
||||
val = strtol(cp, &cp, 0);
|
||||
if (val < 0 || val > 0xff || *cp != ':')
|
||||
if (val < 0 || val >= 0xffff || *cp != ':')
|
||||
goto bad;
|
||||
encl = val;
|
||||
cp++; /* Eat ':' */
|
||||
if (toupper(*cp) != 'S')
|
||||
goto bad;
|
||||
} else
|
||||
encl = 0xff;
|
||||
encl = 0xffff;
|
||||
cp++; /* Eat 'S' */
|
||||
if (*cp == '\0')
|
||||
goto bad;
|
||||
@@ -201,9 +202,7 @@ mfi_lookup_drive(int fd, char *drive, uint16_t *device_id)
|
||||
if (list->addr[i].scsi_dev_type != 0)
|
||||
continue;
|
||||
|
||||
if (((encl == 0xff &&
|
||||
list->addr[i].encl_device_id == 0xffff) ||
|
||||
list->addr[i].encl_index == encl) &&
|
||||
if (list->addr[i].encl_device_id == encl &&
|
||||
list->addr[i].slot_number == slot) {
|
||||
*device_id = list->addr[i].device_id;
|
||||
free(list);
|
||||
|
||||
Reference in new issue
Block a user