diff options
author | Michael Brown | 2016-07-04 17:14:22 +0200 |
---|---|---|
committer | Michael Brown | 2016-07-04 17:20:07 +0200 |
commit | 55f7a675d61f8b83478e71d4f9efb3a1b789eb08 (patch) | |
tree | 1c4b1cadc5da0d7fc283f9007eb9fe6d2d203798 /src/net/tcp | |
parent | [downloader] Treat redirection failures as fatal (diff) | |
download | ipxe-55f7a675d61f8b83478e71d4f9efb3a1b789eb08.tar.gz ipxe-55f7a675d61f8b83478e71d4f9efb3a1b789eb08.tar.xz ipxe-55f7a675d61f8b83478e71d4f9efb3a1b789eb08.zip |
[iscsi] Treat redirection failures as fatal
Debugged-by: Robin Smidsrød <robin@smidsrod.no>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/net/tcp')
-rw-r--r-- | src/net/tcp/iscsi.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/net/tcp/iscsi.c b/src/net/tcp/iscsi.c index 019a4c14..ec004e4b 100644 --- a/src/net/tcp/iscsi.c +++ b/src/net/tcp/iscsi.c @@ -1710,6 +1710,7 @@ static int iscsi_vredirect ( struct iscsi_session *iscsi, int type, va_list args ) { va_list tmp; struct sockaddr *peer; + int rc; /* Intercept redirects to a LOCATION_SOCKET and record the IP * address for the iBFT. This is a bit of a hack, but avoids @@ -1725,7 +1726,15 @@ static int iscsi_vredirect ( struct iscsi_session *iscsi, int type, va_end ( tmp ); } - return xfer_vreopen ( &iscsi->socket, type, args ); + /* Redirect to new location */ + if ( ( rc = xfer_vreopen ( &iscsi->socket, type, args ) ) != 0 ) + goto err; + + return 0; + + err: + iscsi_close ( iscsi, rc ); + return rc; } /** iSCSI socket interface operations */ |