• Robert Love's avatar
    [SCSI] libfc: check for err when recv and state is incorrect · efaf5c08
    Robert Love authored
    If we've just created an interface and the an rport is
    logging in we may have a request on the wire (say PRLI).
    If we destroy the interface, we'll go through each rport
    on the disc->rports list and set each rport's state to NONE.
    Then the lport will reset the EM. The EM reset will send a
    CLOSED event to the prli_resp() handler which will notice
    that the state != PRLI. In this case it frees the frame
    pointer, decrements the refcount and unlocks the rport.
    
    The problem is that there isn't a frame in this case. It's
    just a pointer with an embedded error code. The free causes
    an Oops.
    
    This patch moves the error checking to be before the state
    checking.
    Signed-off-by: default avatarRobert Love <robert.w.love@intel.com>
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
    efaf5c08
fc_lport.c 41.6 KB