mirror of
https://github.com/xcat2/xNBA.git
synced 2025-02-06 22:11:57 +00:00
[iscsi] Avoid duplicate calls to iscsi_tx_done()
The iSCSI TX process can now be woken up by the TCP socket via xfer_window_changed(), so it is no longer valid to assume that iscsi_tx_step() can be called in state ISCSI_TX_IDLE only immediately after completing a transmission. Fix by calling iscsi_tx_done() only upon a transition into state ISCSI_TX_IDLE. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
95d82bb2a2
commit
1b8984eb5d
@ -1333,8 +1333,7 @@ static void iscsi_tx_resume ( struct iscsi_session *iscsi ) {
|
||||
static void iscsi_start_tx ( struct iscsi_session *iscsi ) {
|
||||
|
||||
assert ( iscsi->tx_state == ISCSI_TX_IDLE );
|
||||
assert ( ! process_running ( &iscsi->process ) );
|
||||
|
||||
|
||||
/* Initialise TX BHS */
|
||||
memset ( &iscsi->tx_bhs, 0, sizeof ( iscsi->tx_bhs ) );
|
||||
|
||||
@ -1476,8 +1475,8 @@ static void iscsi_tx_step ( struct iscsi_session *iscsi ) {
|
||||
next_state = ISCSI_TX_IDLE;
|
||||
break;
|
||||
case ISCSI_TX_IDLE:
|
||||
/* Stop processing */
|
||||
iscsi_tx_done ( iscsi );
|
||||
/* Nothing to do; pause processing */
|
||||
iscsi_tx_pause ( iscsi );
|
||||
return;
|
||||
default:
|
||||
assert ( 0 );
|
||||
@ -1504,6 +1503,12 @@ static void iscsi_tx_step ( struct iscsi_session *iscsi ) {
|
||||
|
||||
/* Move to next state */
|
||||
iscsi->tx_state = next_state;
|
||||
|
||||
/* If we have moved to the idle state, mark
|
||||
* transmission as complete
|
||||
*/
|
||||
if ( iscsi->tx_state == ISCSI_TX_IDLE )
|
||||
iscsi_tx_done ( iscsi );
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user