lkml.org 
[lkml]   [2013]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 20/52] SCSI: bfa: Fix crash when symb name set for offline vport
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

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

    From: Vijaya Mohan Guvva <vmohan@brocade.com>

    commit 22a08538dca5c0630226f1c0c58dccd12e463d22 upstream.

    This patch fixes a crash when tried setting symbolic name for an offline
    vport through sysfs. Crash is due to uninitialized pointer lport->ns,
    which gets initialized only on linkup (port online).

    Signed-off-by: Vijaya Mohan Guvva <vmohan@brocade.com>
    Signed-off-by: James Bottomley <JBottomley@Parallels.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/scsi/bfa/bfa_fcs.h | 1 +
    drivers/scsi/bfa/bfa_fcs_lport.c | 14 +++++++++++---
    drivers/scsi/bfa/bfad_attr.c | 7 ++-----
    3 files changed, 14 insertions(+), 8 deletions(-)

    --- a/drivers/scsi/bfa/bfa_fcs.h
    +++ b/drivers/scsi/bfa/bfa_fcs.h
    @@ -299,6 +299,7 @@ wwn_t bfa_fcs_lport_get_rport(struct bfa
    struct bfa_fcs_lport_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs,
    u16 vf_id, wwn_t lpwwn);

    +void bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port, char *symname);
    void bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
    struct bfa_lport_info_s *port_info);
    void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
    --- a/drivers/scsi/bfa/bfa_fcs_lport.c
    +++ b/drivers/scsi/bfa/bfa_fcs_lport.c
    @@ -1097,6 +1097,17 @@ bfa_fcs_lport_init(struct bfa_fcs_lport_
    bfa_sm_send_event(lport, BFA_FCS_PORT_SM_CREATE);
    }

    +void
    +bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port,
    + char *symname)
    +{
    + strcpy(port->port_cfg.sym_name.symname, symname);
    +
    + if (bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
    + bfa_fcs_lport_ns_util_send_rspn_id(
    + BFA_FCS_GET_NS_FROM_PORT(port), NULL);
    +}
    +
    /*
    * fcs_lport_api
    */
    @@ -4950,9 +4961,6 @@ bfa_fcs_lport_ns_util_send_rspn_id(void
    u8 *psymbl = &symbl[0];
    int len;

    - if (!bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
    - return;
    -
    /* Avoid sending RSPN in the following states. */
    if (bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_offline) ||
    bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_plogi_sending) ||
    --- a/drivers/scsi/bfa/bfad_attr.c
    +++ b/drivers/scsi/bfa/bfad_attr.c
    @@ -610,11 +610,8 @@ bfad_im_vport_set_symbolic_name(struct f
    return;

    spin_lock_irqsave(&bfad->bfad_lock, flags);
    - if (strlen(sym_name) > 0) {
    - strcpy(fcs_vport->lport.port_cfg.sym_name.symname, sym_name);
    - bfa_fcs_lport_ns_util_send_rspn_id(
    - BFA_FCS_GET_NS_FROM_PORT((&fcs_vport->lport)), NULL);
    - }
    + if (strlen(sym_name) > 0)
    + bfa_fcs_lport_set_symname(&fcs_vport->lport, sym_name);
    spin_unlock_irqrestore(&bfad->bfad_lock, flags);
    }




    \
     
     \ /
      Last update: 2013-12-10 10:41    [W:4.416 / U:0.712 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site