socket: fix disconnect corner case for iser
iscsi->fd is never initialized in iser driver, so iscsi_disconnect always does not work for iser context. iscsi->fd is used as a member variable of TCP context, so let iscsi TCP driver handle iscsi->fd, we just call iscsi_disconnect in iscsi_destroy_context. Luckly, TCP driver has already handle invalid iscsi->fd case in iscsi_tcp_disconnect. And fix NULL pointer case for iscsi_disconnect. Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
This commit is contained in:
@@ -393,9 +393,7 @@ iscsi_destroy_context(struct iscsi_context *iscsi)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iscsi->fd != -1) {
|
iscsi_disconnect(iscsi);
|
||||||
iscsi_disconnect(iscsi);
|
|
||||||
}
|
|
||||||
|
|
||||||
iscsi_cancel_pdus(iscsi);
|
iscsi_cancel_pdus(iscsi);
|
||||||
|
|
||||||
|
|||||||
@@ -425,6 +425,9 @@ iscsi_tcp_disconnect(struct iscsi_context *iscsi)
|
|||||||
int
|
int
|
||||||
iscsi_disconnect(struct iscsi_context *iscsi)
|
iscsi_disconnect(struct iscsi_context *iscsi)
|
||||||
{
|
{
|
||||||
|
if (!iscsi || !iscsi->drv || !iscsi->drv->disconnect)
|
||||||
|
return -1;
|
||||||
|
|
||||||
return iscsi->drv->disconnect(iscsi);
|
return iscsi->drv->disconnect(iscsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user