I recently ran into an interesting issue with a Lenovo DE4200 connected directly to VMware ESXi hosts using SAS. Everything worked normally until one of the storage controllers was restarted.
During the controller restart the SAS paths disappeared as expected and I/O continued through the remaining controller. The problem was that when the controller came back online, the SAS paths did not return. A reboot of the ESXi host was required before all paths were available again.
The environment
The storage is a Lenovo DE4200 connected using SAS, and the ESXi hosts are using the lsi_msgpt35 driver.
The Lenovo DE-Series devices were already using NMP with VMW_SATP_ALUA and VMW_PSP_RR. This is also the configuration Lenovo documents for DE-Series storage connected to VMware.
Storage Array Type: VMW_SATP_ALUA
Path Selection Policy: VMW_PSP_RR
Plugin: NMP
Transport: sas
Under normal conditions, both SAS paths could be seen from ESXi:
vmhba3:C0:T1:L2
Plugin: NMP
State: active
Transport: sas
vmhba3:C0:T2:L2
Plugin: NMP
State: active
Transport: sas
What happened during a controller restart?
When restarting one of the DE4200 controllers, ESXi correctly detected that the SAS device had disappeared. The problem happened when the controller came back online.
The lsi_msgpt35 driver could see the SAS device again and attempted a TEST_UNIT_READY, but the device was not successfully brought back into a ready state.
lsi_msgpt35_0: _scsih_test_unit_ready: TEST_UNIT_READY: handle(0x0009), lun(0)
lsi_msgpt35_0: _scsih_add_device: device not ready: slot(5)
lsi_msgpt35_0: _scsih_add_device: device not ready: enclosure level(0x0000), connector name(C1)
After a long support case with Lenovo on the problem, they found that it’s a known bug, and I needed to update the firmware on the HBA.
Updating the SAS HBA firmware to the latest supported firmware did not change the behavior.
After some digging I found Broadcom KB 312116 describing problems with SAS paths and the lsi_msgpt3/lsi_msgpt35 drivers. One of the examples in the KB is losing access to SAS front-end volumes during a controller failover.
The interesting part was the following lsi_msgpt35 module parameter:
issue_scsi_cmd_to_bringup_drive
The parameter controls whether the host driver issues SCSI commands to bring a drive into the READY state. The default value is 1.
[root@esxi:~] esxcli system module parameters list -m lsi_msgpt35
issue_scsi_cmd_to_bringup_drive bool Enable/Disable host driver SCSI command issuing capability to bring
the drive to READY state(default=1)
0: Disable host driver SCSI command issuing capability
1: Enable host driver SCSI command issuing capability
Broadcom recommends setting this value to 0 for the SAS path issue described in KB 312116. I therefore tested the same setting on one of the affected ESXi hosts.
esxcli system module parameters set -m lsi_msgpt35 -p issue_scsi_cmd_to_bringup_drive=0
The configured value can be verified with:
esxcli system module parameters list -m lsi_msgpt35 | grep issue_scsi_cmd
The ESXi host needs a reboot before the module parameter takes effect.
Testing the controller failover again
After rebooting the ESXi host I restarted the same DE4200 controller again while monitoring vmkernel.log.
tail -f /var/log/vmkernel.log | grep -E "lsi_msgpt35|ScsiClaimrule|ScsiPath|NMP|HPP|TEST_UNIT|REPORT_LUNS|device not ready"
This time the behavior was different. ESXi removed the paths when the controller disappeared, but when the controller came back the lsi_msgpt35 driver successfully discovered the SAS device and its LUNs again.
lsi_msgpt35_0: _scsih_sas_device_add: handle(0x0009)
lsi_msgpt35_0: _scsih_discover: Found Device C0:T1:L0
lsi_msgpt35_0: _scsih_discover: Found Device C0:T1:L1
lsi_msgpt35_0: _scsih_discover: Found Device C0:T1:L2
Most importantly, the previous “device not ready” messages were gone and the SAS path returned without a reboot or manual rescan of the ESXi host.
The test was repeated with another controller reset and the path recovered correctly again.
vmhba3:C0:T1:L2
Plugin: NMP
State: active
Transport: sas
vmhba3:C0:T2:L2
Plugin: NMP
State: active
Transport: sas
Conclusion
Changing the lsi_msgpt35 issue_scsi_cmd_to_bringup_drive parameter from the default value of 1 to 0 changed the behavior completely in this environment.
- With the default value, the SAS path did not recover after a DE4200 controller restart.
- Updating the HBA firmware did not solve the problem.
- With issue_scsi_cmd_to_bringup_drive=0, the SAS path automatically recovered.
- The controller restart was tested twice after the change with successful path recovery both times.
- No ESXi reboot or manual storage rescan was required for the paths to return.
Broadcom KB 312116 describes the lsi_msgpt35 module parameter and similar SAS controller failover problems on ESXi 7.x and 8.x. As always with storage driver parameters, verify that the configuration is supported for your specific ESXi, HBA and storage combination before applying it to production hosts.
























































