Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137841902
D14403.id39400.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D14403.id39400.diff
View Options
Index: sys/dev/mpr/mpr_sas_lsi.c
===================================================================
--- sys/dev/mpr/mpr_sas_lsi.c
+++ sys/dev/mpr/mpr_sas_lsi.c
@@ -839,23 +839,30 @@
/*
* use_phynum:
- * 1 - use the PhyNum field as a fallback to the mapping logic
+ * 1 - use the PhyNum (and other) fields as fallback to the mapping logic
* 0 - never use the PhyNum field
* -1 - only use the PhyNum field
*
- * Note that using the Phy number to map a device can cause device adds
- * to fail if multiple enclosures/expanders are in the topology. For
- * example, if two devices are in the same slot number in two different
- * enclosures within the topology, only one of those devices will be
- * added. PhyNum mapping should not be used if multiple enclosures are
- * in the topology.
+ * Note that the fallback logic is falliable, and should only be used
+ * if the mapping logic isn't working. It will fail in the following
+ * situations:
+ * - A single enclosure has more than 128 slots
+ * - More than 8 enclosures are present on one bus
+ * - The SEP assigns the same slot number to multiple drives
*/
id = MPR_MAP_BAD_ID;
if (sc->use_phynum != -1)
id = mpr_mapping_get_tid(sc, sas_address, handle);
if (id == MPR_MAP_BAD_ID) {
- if ((sc->use_phynum == 0) ||
- ((id = config_page.PhyNum) > sassc->maxtargets)) {
+ /*
+ * No mapping table. Generate an id based on the
+ * EnclosureHandle and Slot. We can't use PhyNum alone because
+ * there may be multiple expanders on a single bus. Ditto for
+ * Slot. And we can't use EnclosureHandle + Phynum because some
+ * enclosures legitimately contain multiple expanders
+ */
+ id = ((config_page.EnclosureHandle - 1) << 7) | config_page.Slot;
+ if ((sc->use_phynum == 0) || (id > sassc->maxtargets)) {
mpr_dprint(sc, MPR_INFO, "failure at %s:%d/%s()! "
"Could not get ID for device with handle 0x%04x\n",
__FILE__, __LINE__, __func__, handle);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Nov 27, 8:17 AM (3 h, 49 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26250140
Default Alt Text
D14403.id39400.diff (1 KB)
Attached To
Mode
D14403: Fix mpr device mapper fallback logic for busses with multiple expanders.
Attached
Detach File
Event Timeline
Log In to Comment