LSI SAS 3008 card - 35 out of 36 disks detected

Alan Somers asomers at freebsd.org
Mon Dec 8 18:20:31 UTC 2014


On Mon, Dec 8, 2014 at 8:58 AM, Justin O'Conor
<oconnor at crystal.harvard.edu> wrote:
> Hi All,
> Thanks, this is encouraging. smp_discover ses0|1 see 36 sata disks. This is from the 10.1 install.
>

There are certainly some inconsistencies in the smp_discover
responses.  For example, the SEP on ses0 (phy identifier: 36) has
"connector type: SAS virtual connector" and "connector element index:
24"  But the SEP on ses1 (phy identifier: 28) has "connector type: No
information" and "connector element index: 0".  Also note that "phy
identifier: 12" on ses1 has "connector element index: 0".  That would
be the first slot on the rear expander, if the slots and phys are
numbered the same way.  My best guess is that phy 12 and phy 28 mapped
to the same map_idx in mpr_mapping.c:1168.  So the information for the
SEP overwrote the information for the first disk slot.  If my guess is
true, then recabling your chassis as you suggested wouldn't help.
However, you might try the attached but untested patch.  It will
prevent the SEP from being added to the mapping table while printing a
useful error message.  If I'm correct, then the patch will let you use
all 36 disk slots, but you won't have ses1 anymore.

In the meantime, I'll try to reproduce your problem.  I have all the
required equipment in my lab.

-Alan
-------------- next part --------------
Index: sys/dev/mpr/mpr_mapping.c
===================================================================
--- sys/dev/mpr/mpr_mapping.c	(revision 275620)
+++ sys/dev/mpr/mpr_mapping.c	(working copy)
@@ -1168,6 +1168,22 @@
 			map_idx = et_entry->start_index + phy_change->slot -
 			    et_entry->start_slot;
 			mt_entry = &sc->mapping_table[map_idx];
+			if (mt_entry->physical_id != 0 &&
+			    mt_entry->physical_id != phy_change->physical_id) {
+				printf("%s: failed to add the device with slot "
+				    "%5d because that entry in the mapping "
+				    "table it already used.  This is a bug in "
+				    "either the HBA firmware or the expander "
+				    "firmware. Old entry: physical_id=%16lx "
+				    "dev_handle=%#04x.  New entry: "
+				    "physical_id=%16lx handle=%#04x\n",
+				    __func__, phy_change->slot,
+				    mt_entry->physical_id,
+				    mt_entry->dev_handle,
+				    phy_change->physical_id,
+				    phy_change->dev_handle);
+				continue;
+			}
 			mt_entry->physical_id = phy_change->physical_id;
 			mt_entry->channel = 0;
 			mt_entry->id = map_idx;


More information about the freebsd-scsi mailing list