• Nicholas Bellinger's avatar
    iscsi-target: Fix early sk_data_ready LOGIN_FLAGS_READY race · 8f0dfb3d
    Nicholas Bellinger authored
    There is a iscsi-target/tcp login race in LOGIN_FLAGS_READY
    state assignment that can result in frequent errors during
    iscsi discovery:
    
          "iSCSI Login negotiation failed."
    
    To address this bug, move the initial LOGIN_FLAGS_READY
    assignment ahead of iscsi_target_do_login() when handling
    the initial iscsi_target_start_negotiation() request PDU
    during connection login.
    
    As iscsi_target_do_login_rx() work_struct callback is
    clearing LOGIN_FLAGS_READ_ACTIVE after subsequent calls
    to iscsi_target_do_login(), the early sk_data_ready
    ahead of the first iscsi_target_do_login() expects
    LOGIN_FLAGS_READY to also be set for the initial
    login request PDU.
    
    As reported by Maged, this was first obsered using an
    MSFT initiator running across multiple VMWare host
    virtual machines with iscsi-target/tcp.
    Reported-by: default avatarMaged Mokhtar <mmokhtar@binarykinetics.com>
    Tested-by: default avatarMaged Mokhtar <mmokhtar@binarykinetics.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    8f0dfb3d
iscsi_target_nego.c 33.5 KB