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:
parent
5e9487f719
commit
ab5ffaf7d0
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user