@@ -472,12 +472,18 @@ static int iscsi_target_do_login(struct iscsit_conn *, struct iscsi_login *);
472472
473473static bool __iscsi_target_sk_check_close (struct sock * sk )
474474{
475- if (sk -> sk_state == TCP_CLOSE_WAIT || sk -> sk_state == TCP_CLOSE ) {
476- pr_debug ("__iscsi_target_sk_check_close: TCP_CLOSE_WAIT|TCP_CLOSE,"
475+ switch (sk -> sk_state ) {
476+ case TCP_FIN_WAIT1 :
477+ case TCP_FIN_WAIT2 :
478+ case TCP_CLOSE_WAIT :
479+ case TCP_LAST_ACK :
480+ case TCP_CLOSE :
481+ pr_debug ("__iscsi_target_sk_check_close: socket closing,"
477482 "returning TRUE\n" );
478483 return true;
484+ default :
485+ return false;
479486 }
480- return false;
481487}
482488
483489static bool iscsi_target_sk_check_close (struct iscsit_conn * conn )
@@ -639,6 +645,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
639645 } else if (rc == 1 ) {
640646 iscsit_stop_login_timer (conn );
641647 cancel_delayed_work (& conn -> login_work );
648+ iscsit_stop_login_timer (conn );
642649 iscsi_target_nego_release (conn );
643650 iscsi_post_login_handler (np , conn , zero_tsih );
644651 iscsit_deaccess_np (np , tpg , tpg_np );
@@ -649,6 +656,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
649656 iscsi_target_restore_sock_callbacks (conn );
650657 iscsit_stop_login_timer (conn );
651658 cancel_delayed_work (& conn -> login_work );
659+ iscsit_stop_login_timer (conn );
652660 iscsi_target_login_drop (conn , login );
653661 iscsit_deaccess_np (np , tpg , tpg_np );
654662}
@@ -1352,6 +1360,9 @@ int iscsi_target_start_negotiation(
13521360 set_bit (LOGIN_FLAGS_INITIAL_PDU , & conn -> login_flags );
13531361 write_unlock_bh (& sk -> sk_callback_lock );
13541362 }
1363+
1364+ iscsit_start_login_timer (conn );
1365+
13551366 /*
13561367 * If iscsi_target_do_login returns zero to signal more PDU
13571368 * exchanges are required to complete the login, go ahead and
0 commit comments