@@ -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