Message ID | 20190401211804.9879-1-dann.frazier@canonical.com |
---|---|
State | New |
Headers | show |
Series | [Disco] scsi: libsas: Check SMP PHY control function result | expand |
On Mon, Apr 01, 2019 at 03:18:04PM -0600, dann frazier wrote: > From: John Garry <john.garry@huawei.com> > > BugLink: https://bugs.launchpad.net/bugs/1822680 > > Currently the SMP PHY control execution result is checked, however the > function result for the command is not. > > As such, we may be missing all potential errors, like SMP FUNCTION FAILED, > INVALID REQUEST FRAME LENGTH, etc., meaning the PHY control request has > failed. > > In some scenarios we need to ensure the function result is accepted, so add > a check for this. > > Tested-by: Jian Luo <luojian5@huawei.com> > Signed-off-by: John Garry <john.garry@huawei.com> > Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> > (cherry picked from commit 01929a65dfa13e18d89264ab1378854a91857e59) > Signed-off-by: dann frazier <dann.frazier@canonical.com> Applied to disco/master-next, thanks!
diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c index b5d31e7cbbf1f..bc0bdd4eafe62 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -614,7 +614,14 @@ int sas_smp_phy_control(struct domain_device *dev, int phy_id, } res = smp_execute_task(dev, pc_req, PC_REQ_SIZE, pc_resp,PC_RESP_SIZE); - + if (res) { + pr_err("ex %016llx phy%02d PHY control failed: %d\n", + SAS_ADDR(dev->sas_addr), phy_id, res); + } else if (pc_resp[2] != SMP_RESP_FUNC_ACC) { + pr_err("ex %016llx phy%02d PHY control failed: function result 0x%x\n", + SAS_ADDR(dev->sas_addr), phy_id, pc_resp[2]); + res = pc_resp[2]; + } kfree(pc_resp); kfree(pc_req); return res;