lkml.org 
[lkml]   [2012]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[ 127/167] [PATCH] [SCSI] libsas: fix sas_find_bcast_phy() in the presence of vacant phys
    3.2-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Thomas Jackson <thomas.p.jackson@intel.com>

    commit 1699490db339e2c6b3037ea8e7dcd6b2755b688e upstream.

    If an expander reports 'PHY VACANT' for a phy index prior to the one
    that generated a BCN libsas fails rediscovery. Since a vacant phy is
    defined as a valid phy index that will never have an attached device
    just continue the search.

    Signed-off-by: Thomas Jackson <thomas.p.jackson@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: James Bottomley <JBottomley@Parallels.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/scsi/libsas/sas_expander.c | 17 ++++++++++++-----
    1 file changed, 12 insertions(+), 5 deletions(-)

    diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c
    index 05acd9e..833bea0 100644
    --- a/drivers/scsi/libsas/sas_expander.c
    +++ b/drivers/scsi/libsas/sas_expander.c
    @@ -1718,9 +1718,17 @@ static int sas_find_bcast_phy(struct domain_device *dev, int *phy_id,
    int phy_change_count = 0;

    res = sas_get_phy_change_count(dev, i, &phy_change_count);
    - if (res)
    - goto out;
    - else if (phy_change_count != ex->ex_phy[i].phy_change_count) {
    + switch (res) {
    + case SMP_RESP_PHY_VACANT:
    + case SMP_RESP_NO_PHY:
    + continue;
    + case SMP_RESP_FUNC_ACC:
    + break;
    + default:
    + return res;
    + }
    +
    + if (phy_change_count != ex->ex_phy[i].phy_change_count) {
    if (update)
    ex->ex_phy[i].phy_change_count =
    phy_change_count;
    @@ -1728,8 +1736,7 @@ static int sas_find_bcast_phy(struct domain_device *dev, int *phy_id,
    return 0;
    }
    }
    -out:
    - return res;
    + return 0;
    }

    static int sas_get_ex_change_count(struct domain_device *dev, int *ecc)
    --
    1.7.10




    \
     
     \ /
      Last update: 2012-05-09 09:02    [W:0.027 / U:62.756 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site