• Roland Dreier's avatar
    qla2xxx: Update target lookup session tables when a target session changes · c8292d1d
    Roland Dreier authored
    It is possible for the target code to change the loop_id or s_id of a
    target session in reaction to an FC fabric change.  However, the
    session structures are stored in tables that are indexed by these two
    keys, and if we just change the session structure but leave the
    pointers to it in the old places in the table, havoc can ensue.  For
    example, a new session might come along that should go in the old slot
    in the table and overwrite the old session pointer.
    
    To handle this, add a new tgt_ops->update_sess() method that also
    updates the "by loop_id" and "by s_id" lookup tables when a session
    changes, so that the keys where a session pointer is stored in these
    tables always matches the keys in the session structure itself.
    
    (nab: Drop unnecessary double inversion with FCF_CONF_COMP_SUPPORTED
          usage)
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    Cc: Chad Dupuis <chad.dupuis@qlogic.com>
    Cc: Arun Easi <arun.easi@qlogic.com>
    Cc: Saurav Kashyap <saurav.kashyap@qlogic.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    c8292d1d
qla_target.c 135 KB