@@ -471,12 +471,18 @@ static int iscsi_target_do_login(struct iscsi_conn *, struct iscsi_login *);
471
471
472
472
static bool __iscsi_target_sk_check_close (struct sock * sk )
473
473
{
474
- if (sk -> sk_state == TCP_CLOSE_WAIT || sk -> sk_state == TCP_CLOSE ) {
475
- pr_debug ("__iscsi_target_sk_check_close: TCP_CLOSE_WAIT|TCP_CLOSE,"
474
+ switch (sk -> sk_state ) {
475
+ case TCP_FIN_WAIT1 :
476
+ case TCP_FIN_WAIT2 :
477
+ case TCP_CLOSE_WAIT :
478
+ case TCP_LAST_ACK :
479
+ case TCP_CLOSE :
480
+ pr_debug ("__iscsi_target_sk_check_close: socket closing,"
476
481
"returning TRUE\n" );
477
482
return true;
483
+ default :
484
+ return false;
478
485
}
479
- return false;
480
486
}
481
487
482
488
static bool iscsi_target_sk_check_close (struct iscsi_conn * conn )
@@ -534,25 +540,6 @@ static void iscsi_target_login_drop(struct iscsi_conn *conn, struct iscsi_login
534
540
iscsi_target_login_sess_out (conn , zero_tsih , true);
535
541
}
536
542
537
- struct conn_timeout {
538
- struct timer_list timer ;
539
- struct iscsi_conn * conn ;
540
- };
541
-
542
- static void iscsi_target_login_timeout (struct timer_list * t )
543
- {
544
- struct conn_timeout * timeout = from_timer (timeout , t , timer );
545
- struct iscsi_conn * conn = timeout -> conn ;
546
-
547
- pr_debug ("Entering iscsi_target_login_timeout >>>>>>>>>>>>>>>>>>>\n" );
548
-
549
- if (conn -> login_kworker ) {
550
- pr_debug ("Sending SIGINT to conn->login_kworker %s/%d\n" ,
551
- conn -> login_kworker -> comm , conn -> login_kworker -> pid );
552
- send_sig (SIGINT , conn -> login_kworker , 1 );
553
- }
554
- }
555
-
556
543
static void iscsi_target_do_login_rx (struct work_struct * work )
557
544
{
558
545
struct iscsi_conn * conn = container_of (work ,
@@ -561,7 +548,6 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
561
548
struct iscsi_np * np = login -> np ;
562
549
struct iscsi_portal_group * tpg = conn -> tpg ;
563
550
struct iscsi_tpg_np * tpg_np = conn -> tpg_np ;
564
- struct conn_timeout timeout ;
565
551
int rc , zero_tsih = login -> zero_tsih ;
566
552
bool state ;
567
553
@@ -599,14 +585,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
599
585
conn -> login_kworker = current ;
600
586
allow_signal (SIGINT );
601
587
602
- timeout .conn = conn ;
603
- timer_setup_on_stack (& timeout .timer , iscsi_target_login_timeout , 0 );
604
- mod_timer (& timeout .timer , jiffies + TA_LOGIN_TIMEOUT * HZ );
605
- pr_debug ("Starting login timer for %s/%d\n" , current -> comm , current -> pid );
606
-
607
588
rc = conn -> conn_transport -> iscsit_get_login_rx (conn , login );
608
- del_timer_sync (& timeout .timer );
609
- destroy_timer_on_stack (& timeout .timer );
610
589
flush_signals (current );
611
590
conn -> login_kworker = NULL ;
612
591
@@ -647,6 +626,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
647
626
goto err ;
648
627
} else if (rc == 1 ) {
649
628
cancel_delayed_work (& conn -> login_work );
629
+ iscsit_stop_login_timer (conn );
650
630
iscsi_target_nego_release (conn );
651
631
iscsi_post_login_handler (np , conn , zero_tsih );
652
632
iscsit_deaccess_np (np , tpg , tpg_np );
@@ -656,6 +636,7 @@ static void iscsi_target_do_login_rx(struct work_struct *work)
656
636
err :
657
637
iscsi_target_restore_sock_callbacks (conn );
658
638
cancel_delayed_work (& conn -> login_work );
639
+ iscsit_stop_login_timer (conn );
659
640
iscsi_target_login_drop (conn , login );
660
641
iscsit_deaccess_np (np , tpg , tpg_np );
661
642
}
@@ -1301,6 +1282,9 @@ int iscsi_target_start_negotiation(
1301
1282
set_bit (LOGIN_FLAGS_INITIAL_PDU , & conn -> login_flags );
1302
1283
write_unlock_bh (& sk -> sk_callback_lock );
1303
1284
}
1285
+
1286
+ iscsit_start_login_timer (conn );
1287
+
1304
1288
/*
1305
1289
* If iscsi_target_do_login returns zero to signal more PDU
1306
1290
* exchanges are required to complete the login, go ahead and
@@ -1319,8 +1303,10 @@ int iscsi_target_start_negotiation(
1319
1303
iscsi_target_restore_sock_callbacks (conn );
1320
1304
iscsi_remove_failed_auth_entry (conn );
1321
1305
}
1322
- if (ret != 0 )
1306
+ if (ret != 0 ) {
1307
+ iscsit_stop_login_timer (conn );
1323
1308
iscsi_target_nego_release (conn );
1309
+ }
1324
1310
1325
1311
return ret ;
1326
1312
}
0 commit comments