lkml.org 
[lkml]   [2009]   [May]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 6/10] scsi: megaraid_sas - Report the Unconfigured PD (system PD) to OS
    Report the Un-configured PD (system PD) to OS.

    Signed-off-by Bo Yang<bo.yang@lsi.com>

    ---
    drivers/scsi/megaraid/megaraid_sas.c | 57 +++++++++++++++++++----------------
    1 file changed, 32 insertions(+), 25 deletions(-)

    diff -rupN linux-2.6.28_orig/drivers/scsi/megaraid/megaraid_sas.c linux-2.6.28_new/drivers/scsi/megaraid/megaraid_sas.c
    --- linux-2.6.28_orig/drivers/scsi/megaraid/megaraid_sas.c 2009-05-04 20:24:19.000000000 -0400
    +++ linux-2.6.28_new/drivers/scsi/megaraid/megaraid_sas.c 2009-05-04 20:30:02.000000000 -0400
    @@ -1114,24 +1114,45 @@ megasas_queue_command(struct scsi_cmnd *
    return 0;
    }

    +static struct megasas_instance *megasas_lookup_instance(u16 host_no)
    +{
    + int i;
    +
    + for (i = 0; i < megasas_mgmt_info.max_index; i++) {
    +
    + if ((megasas_mgmt_info.instance[i]) &&
    + (megasas_mgmt_info.instance[i]->host->host_no == host_no))
    + return megasas_mgmt_info.instance[i];
    + }
    +
    + return NULL;
    +}
    +
    static int megasas_slave_configure(struct scsi_device *sdev)
    {
    - /*
    - * Don't export physical disk devices to the disk driver.
    - *
    - * FIXME: Currently we don't export them to the midlayer at all.
    - * That will be fixed once LSI engineers have audited the
    - * firmware for possible issues.
    - */
    - if (sdev->channel < MEGASAS_MAX_PD_CHANNELS && sdev->type == TYPE_DISK)
    + u16 pd_index = 0;
    + struct megasas_instance *instance;
    + instance = megasas_lookup_instance(sdev->host->host_no);
    +
    + /* only export system physical disk devices to the midlayer */
    + if ((sdev->channel < MEGASAS_MAX_PD_CHANNELS) &&
    + (sdev->type == TYPE_DISK)) {
    + pd_index = (sdev->channel * MEGASAS_MAX_DEV_PER_CHANNEL) +
    + sdev->id;
    + if ((instance->pd_list[pd_index].driveState ==
    + MR_PD_STATE_SYSTEM)) {
    + blk_queue_rq_timeout(sdev->request_queue,
    + MEGASAS_DEFAULT_CMD_TIMEOUT * HZ);
    + return 0;
    + }
    return -ENXIO;
    + }

    /*
    * The RAID firmware may require extended timeouts.
    */
    - if (sdev->channel >= MEGASAS_MAX_PD_CHANNELS)
    - blk_queue_rq_timeout(sdev->request_queue,
    - MEGASAS_DEFAULT_CMD_TIMEOUT * HZ);
    + blk_queue_rq_timeout(sdev->request_queue,
    + MEGASAS_DEFAULT_CMD_TIMEOUT * HZ);
    return 0;
    }

    @@ -3453,20 +3474,6 @@ megasas_mgmt_fw_ioctl(struct megasas_ins
    return error;
    }

    -static struct megasas_instance *megasas_lookup_instance(u16 host_no)
    -{
    - int i;
    -
    - for (i = 0; i < megasas_mgmt_info.max_index; i++) {
    -
    - if ((megasas_mgmt_info.instance[i]) &&
    - (megasas_mgmt_info.instance[i]->host->host_no == host_no))
    - return megasas_mgmt_info.instance[i];
    - }
    -
    - return NULL;
    -}
    -
    static int megasas_mgmt_ioctl_fw(struct file *file, unsigned long arg)
    {
    struct megasas_iocpacket __user *user_ioc =

    \
     
     \ /
      Last update: 2009-05-06 03:39    [W:0.028 / U:0.372 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site