@@ -472,12 +472,18 @@ static int iscsi_target_do_login(struct iscsit_conn *, struct iscsi_login *);
472
472
473
473
static bool __iscsi_target_sk_check_close (struct sock * sk )
474
474
{
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,"
477
482
"returning TRUE\n" );
478
483
return true;
484
+ default :
485
+ return false;
479
486
}
480
- return false;
481
487
}
482
488
483
489
static 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)
639
645
} else if (rc == 1 ) {
640
646
iscsit_stop_login_timer (conn );
641
647
cancel_delayed_work (& conn -> login_work );
648
+ iscsit_stop_login_timer (conn );
642
649
iscsi_target_nego_release (conn );
643
650
iscsi_post_login_handler (np , conn , zero_tsih );
644
651
iscsit_deaccess_np (np , tpg , tpg_np );
@@ -649,6 +656,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
649
656
iscsi_target_restore_sock_callbacks (conn );
650
657
iscsit_stop_login_timer (conn );
651
658
cancel_delayed_work (& conn -> login_work );
659
+ iscsit_stop_login_timer (conn );
652
660
iscsi_target_login_drop (conn , login );
653
661
iscsit_deaccess_np (np , tpg , tpg_np );
654
662
}
@@ -1352,6 +1360,9 @@ int iscsi_target_start_negotiation(
1352
1360
set_bit (LOGIN_FLAGS_INITIAL_PDU , & conn -> login_flags );
1353
1361
write_unlock_bh (& sk -> sk_callback_lock );
1354
1362
}
1363
+
1364
+ iscsit_start_login_timer (conn );
1365
+
1355
1366
/*
1356
1367
* If iscsi_target_do_login returns zero to signal more PDU
1357
1368
* exchanges are required to complete the login, go ahead and
0 commit comments