From e2a7fdfb367aea959b67841202c3566e96726ecf Mon Sep 17 00:00:00 2001 From: zhenwei pi Date: Wed, 26 Feb 2020 10:29:44 +0800 Subject: [PATCH] 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 --- lib/init.c | 4 +--- lib/socket.c | 3 +++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/init.c b/lib/init.c index f3e2e13..a120e88 100644 --- a/lib/init.c +++ b/lib/init.c @@ -393,9 +393,7 @@ iscsi_destroy_context(struct iscsi_context *iscsi) return 0; } - if (iscsi->fd != -1) { - iscsi_disconnect(iscsi); - } + iscsi_disconnect(iscsi); iscsi_cancel_pdus(iscsi); diff --git a/lib/socket.c b/lib/socket.c index 79471a3..cd6c97a 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -425,6 +425,9 @@ iscsi_tcp_disconnect(struct iscsi_context *iscsi) int iscsi_disconnect(struct iscsi_context *iscsi) { + if (!iscsi || !iscsi->drv || !iscsi->drv->disconnect) + return -1; + return iscsi->drv->disconnect(iscsi); }