A cleaner method of handling login redirection; just use the existing
authorMichael Brown <mcb30@etherboot.org>
Wed, 6 Dec 2006 19:53:56 +0000 (19:53 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 6 Dec 2006 19:53:56 +0000 (19:53 +0000)
reconnection mechanism.  This avoids the problems of trying to reuse
the TCP connection structure before the old connection has cleanly exited.

src/net/tcp/iscsi.c

index 424bbcf..665b976 100644 (file)
@@ -735,8 +735,11 @@ static void iscsi_rx_login_response ( struct iscsi_session *iscsi, void *data,
        /* Check for login redirection */
        if ( response->status_class == ISCSI_STATUS_REDIRECT ) {
                DBG ( "iSCSI %p redirecting to new server\n", iscsi );
-               iscsi_close ( iscsi, -EINPROGRESS );
-               tcp_connect ( &iscsi->tcp );
+               /* Close the TCP connection; our TCP closed() method
+                * will take care of the reconnection once this
+                * connection has been cleanly terminated.
+                */
+               tcp_close ( &iscsi->tcp );
                return;
        }