Substitute self-developed patch with mainline patch

Substitute self-developed patch with mainline patch to fix
nr_sessions do not work during iscsid restart.

Signed-off-by: Wenchao Hao <haowenchao@huawei.com>
This commit is contained in:
Wenchao Hao 2022-09-27 14:26:16 +08:00
parent 5e9487f719
commit ab5ffaf7d0
3 changed files with 64 additions and 48 deletions

View File

@ -1,46 +0,0 @@
From 93d217ce22e7668abfc5e6dbc015b37b20174b09 Mon Sep 17 00:00:00 2001
From: huangkaibin <huangkaibin@huawei.com>
Date: Fri, 19 Jan 2018 03:00:17 +0800
Subject: [PATCH] iscsid: Do not sync session when a session is already created
for a remote device
Do not sync session when a session is already created for a remote device
1. In the following scenarios, two or more sessions will be created and open for one remote device
a) two or more sync sessions are requested from the sync process for the same remote device.
this may occur when iscsid is restarted, one is requested by the previous started sync process but not handled, and another
is requested by the newly started sync process.
b) one is created in sync session, the other is created in __session_login_task.
2. If two or more sessions are created for one remote device, and there are connection problems on the remote device,
these sessions will be reopen again, and will cause one to close the connection while the other to set param for the remote device
in kernel, and will cause kernel to panic.
3. this patch fix this problem by not sync session when a session is already created for a remote device
---
usr/initiator.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/usr/initiator.c b/usr/initiator.c
index 60bd2b7..4a48bf5 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -2097,11 +2097,18 @@ iscsi_sync_session(node_rec_t *rec, queue_task_t *qtask, uint32_t sid)
iscsi_session_t *session;
struct iscsi_transport *t;
int err;
+ int nr_found;
t = iscsi_sysfs_get_transport_by_name(rec->iface.transport_name);
if (!t)
return ISCSI_ERR_TRANS_NOT_FOUND;
+ nr_found = session_find_by_rec(rec);
+ if(nr_found > 0) {
+ log_error("session is already created. sid: %d, name: %s.\n", sid, rec->name);
+ return ISCSI_ERR_SESS_EXISTS;
+ }
+
session = __session_create(rec, t, &err);
if (!session)
return ISCSI_ERR_LOGIN;
--
1.8.3.1

View File

@ -0,0 +1,59 @@
From 88fa76cec740cc44b7c4b9b384a87ef6c1288174 Mon Sep 17 00:00:00 2001
From: Wenchao Hao <haowenchao@huawei.com>
Date: Tue, 8 Feb 2022 10:40:33 +0800
Subject: [PATCH] iscsid: Check session id before start sync a thread
If session id has already been synced just return ISCSI_ERR_SESS_EXISTS.
A same session id would make two MGMT_IPC_SESSION_SYNC requests in
following scenario:
iscsid.socket is enabled, and iscsid did not handle previous
MGMT_IPC_SESSION_SYNC due to abnormal exit. This MGMT_IPC_SESSION_SYNC
request would left unhandled, when iscsid restart again, newly started
iscsid can get this MGMT_IPC_SESSION_SYNC request.
While the newly started iscsid would make a MGMT_IPC_SESSION_SYNC
request for same session id too.
So here should check if the session id has already been synced.
Signed-off-by: Wenchao Hao <haowenchao@huawei.com>
---
usr/initiator.c | 4 ++++
usr/iscsid.c | 3 +++
2 files changed, 7 insertions(+)
diff --git a/usr/initiator.c b/usr/initiator.c
index 684647c..4ec00b0 100644
--- a/usr/initiator.c
+++ b/usr/initiator.c
@@ -2012,6 +2012,10 @@ iscsi_sync_session(node_rec_t *rec, queue_task_t *qtask, uint32_t sid)
struct iscsi_transport *t;
int err;
+ session = session_find_by_sid(sid);
+ if (session != NULL)
+ return ISCSI_ERR_SESS_EXISTS;
+
t = iscsi_sysfs_get_transport_by_name(rec->iface.transport_name);
if (!t)
return ISCSI_ERR_TRANS_NOT_FOUND;
diff --git a/usr/iscsid.c b/usr/iscsid.c
index 478c83d..e5bd1f5 100644
--- a/usr/iscsid.c
+++ b/usr/iscsid.c
@@ -289,7 +289,10 @@ retry:
retries++;
sleep(1);
goto retry;
+ } else if (rc == ISCSI_ERR_SESS_EXISTS) {
+ log_debug(1, "sync session %d returned ISCSI_ERR_SESS_EXISTS", info->sid);
}
+
return 0;
}
--
2.27.0

View File

@ -4,7 +4,7 @@
Name: open-iscsi
Version: 2.1.5
Release: 8
Release: 9
Summary: ISCSI software initiator daemon and utility programs
License: GPLv2+ and BSD
URL: http://www.open-iscsi.com
@ -13,7 +13,7 @@ patch1: 0001-change-iscsi-iqn-default-value.patch
patch2: 0002-iscsid-Check-nr_sessions-when-creating-a-copy-of-exi.patch
patch3: 0003-restart-log-daemon-when-exited-abnormally.patch
patch4: 0004-check-initiator-name-out-of-range.patch
patch5: 0005-do-not-sync-session-when-a-session-is-already-created.patch
patch5: 0005-iscsid-Check-session-id-before-start-sync-a-thread.patch
patch6: 0006-fix-default-file-corrupt.patch
patch7: 0007-fix-iscsiadm-logout-timeout.patch
patch8: 0008-default-file-zero-after-power-outage.patch
@ -158,6 +158,9 @@ fi
%{_mandir}/man8/*
%changelog
* Tue Sep 27 2022 haowenchao <haowenchao@huawei.com> - 2.1.5-9
- Substitute self-developed patch with mainline patch
* Thu Jun 23 2022 haowenchao <haowenchao@huawei.com> - 2.1.5-8
- Remove unused fwparam_ibft.[ch] files in fwparam_ibft