• Brian King's avatar
    scsi: ibmvfc: Fix invalid state machine BUG_ON() · 15cfef86
    Brian King authored
    This fixes an issue hitting the BUG_ON() in ibmvfc_do_work(). When going
    through a host action of IBMVFC_HOST_ACTION_RESET, we change the action to
    IBMVFC_HOST_ACTION_TGT_DEL, then drop the host lock, and reset the CRQ,
    which changes the host state to IBMVFC_NO_CRQ. If, prior to setting the
    host state to IBMVFC_NO_CRQ, ibmvfc_init_host() is called, it can then end
    up changing the host action to IBMVFC_HOST_ACTION_INIT.  If we then change
    the host state to IBMVFC_NO_CRQ, we will then hit the BUG_ON().
    
    Make a couple of changes to avoid this. Leave the host action to be
    IBMVFC_HOST_ACTION_RESET or IBMVFC_HOST_ACTION_REENABLE until after we drop
    the host lock and reset or reenable the CRQ. Also harden the host state
    machine to ensure we cannot leave the reset / reenable state until we've
    finished processing the reset or reenable.
    
    Link: https://lore.kernel.org/r/20210413001009.902400-1-tyreld@linux.ibm.com
    Fixes: 73ee5d86 ("[SCSI] ibmvfc: Fix soft lockup on resume")
    Signed-off-by: default avatarBrian King <brking@linux.vnet.ibm.com>
    [tyreld: added fixes tag]
    Signed-off-by: default avatarTyrel Datwyler <tyreld@linux.ibm.com>
    [mkp: fix comment checkpatch warnings]
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    15cfef86
ibmvfc.c 175 KB