• J
    iscsi-target: Always wait for kthread_should_stop() before kthread exit · 5e0cf5e6
    Jiang Yi 提交于
    There are three timing problems in the kthread usages of iscsi_target_mod:
    
     - np_thread of struct iscsi_np
     - rx_thread and tx_thread of struct iscsi_conn
    
    In iscsit_close_connection(), it calls
    
     send_sig(SIGINT, conn->tx_thread, 1);
     kthread_stop(conn->tx_thread);
    
    In conn->tx_thread, which is iscsi_target_tx_thread(), when it receive
    SIGINT the kthread will exit without checking the return value of
    kthread_should_stop().
    
    So if iscsi_target_tx_thread() exit right between send_sig(SIGINT...)
    and kthread_stop(...), the kthread_stop() will try to stop an already
    stopped kthread.
    
    This is invalid according to the documentation of kthread_stop().
    
    (Fix -ECONNRESET logout handling in iscsi_target_tx_thread and
     early iscsi_target_rx_thread failure case - nab)
    Signed-off-by: NJiang Yi <jiangyilism@gmail.com>
    Cc: <stable@vger.kernel.org> # v3.12+
    Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
    5e0cf5e6
iscsi_target_erl0.c 27.0 KB