backport patches from epoch1
This commit is contained in:
parent
f9fb9c33bd
commit
862d109cb4
40
0020-Fix-iscsi.service-so-it-handles-restarts-better.patch
Normal file
40
0020-Fix-iscsi.service-so-it-handles-restarts-better.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From 6a9b0728c55b8ad5c6d5dba3f38697eded09538a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lee Duncan <lduncan@suse.com>
|
||||||
|
Date: Wed, 4 Mar 2020 12:59:10 -0800
|
||||||
|
Subject: [PATCH 151/170] Fix iscsi.service so it handles restarts better
|
||||||
|
|
||||||
|
Requiring iscsid.service means that a restart of iscsi.service
|
||||||
|
restarted iscsid.service when unneccesary.
|
||||||
|
|
||||||
|
Also, we should treat an exit value of 15 as normal, since
|
||||||
|
this just means the session is already present.
|
||||||
|
It should rely on iscsid.socket, no iscsid.service.
|
||||||
|
---
|
||||||
|
etc/systemd/iscsi.service | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
|
||||||
|
index e475888..1c286d1 100644
|
||||||
|
--- a/etc/systemd/iscsi.service
|
||||||
|
+++ b/etc/systemd/iscsi.service
|
||||||
|
@@ -3,7 +3,7 @@ Description=Login and scanning of iSCSI devices
|
||||||
|
Documentation=man:iscsiadm(8) man:iscsid(8)
|
||||||
|
Before=remote-fs.target
|
||||||
|
After=network.target network-online.target iscsid.service
|
||||||
|
-Requires=iscsid.service
|
||||||
|
+Requires=iscsid.socket
|
||||||
|
ConditionPathExists=/etc/iscsi/initiatorname.iscsi
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
@@ -11,7 +11,7 @@ Type=oneshot
|
||||||
|
ExecStart=/sbin/iscsiadm -m node --loginall=automatic
|
||||||
|
ExecStop=/sbin/iscsiadm -m node --logoutall=automatic
|
||||||
|
ExecStop=/sbin/iscsiadm -m node --logoutall=manual
|
||||||
|
-SuccessExitStatus=21
|
||||||
|
+SuccessExitStatus=21 15
|
||||||
|
RemainAfterExit=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
28
0021-Ignore-iface.example-in-iface-match-checks.patch
Normal file
28
0021-Ignore-iface.example-in-iface-match-checks.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 16d4899d52b3b88774ac6d9b3cc0f5626f4705da Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lee Duncan <lduncan@suse.com>
|
||||||
|
Date: Tue, 19 Nov 2019 07:54:41 -0800
|
||||||
|
Subject: [PATCH 158/170] Ignore iface.example in iface match checks
|
||||||
|
|
||||||
|
Just a cleanup, as looking at the example file
|
||||||
|
didn't hurt anything, but did waste our time.
|
||||||
|
---
|
||||||
|
usr/iface.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/usr/iface.c b/usr/iface.c
|
||||||
|
index 323f167..11f3d2a 100644
|
||||||
|
--- a/usr/iface.c
|
||||||
|
+++ b/usr/iface.c
|
||||||
|
@@ -905,6 +905,9 @@ int iface_for_each_iface(void *data, int skip_def, int *nr_found,
|
||||||
|
!strcmp(iface_dent->d_name, ".."))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
+ if (!strcmp(iface_dent->d_name, "iface.example"))
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
log_debug(5, "iface_for_each_iface found %s",
|
||||||
|
iface_dent->d_name);
|
||||||
|
iface = iface_alloc(iface_dent->d_name, &err);
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
30
0022-Fix-SIGPIPE-loop-in-signal-handler.patch
Normal file
30
0022-Fix-SIGPIPE-loop-in-signal-handler.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From 71e4ce5e7722dde25751025cac0e8b29d8d540df Mon Sep 17 00:00:00 2001
|
||||||
|
From: fredvx <48496214+fredvx@users.noreply.github.com>
|
||||||
|
Date: Wed, 22 Apr 2020 14:24:50 -0400
|
||||||
|
Subject: [PATCH 161/170] Fix SIGPIPE loop in signal handler
|
||||||
|
|
||||||
|
---
|
||||||
|
usr/iscsid.c | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/usr/iscsid.c b/usr/iscsid.c
|
||||||
|
index 99d27ab..e501498 100644
|
||||||
|
--- a/usr/iscsid.c
|
||||||
|
+++ b/usr/iscsid.c
|
||||||
|
@@ -310,7 +310,12 @@ static void iscsid_shutdown(void)
|
||||||
|
|
||||||
|
static void catch_signal(int signo)
|
||||||
|
{
|
||||||
|
- log_debug(1, "pid %d caught signal %d", getpid(), signo);
|
||||||
|
+ /*
|
||||||
|
+ * Do not try to call log_debug() if there is a PIPE error
|
||||||
|
+ * because we can get caught in a PIPE error loop.
|
||||||
|
+ */
|
||||||
|
+ if (signo != SIGPIPE)
|
||||||
|
+ log_debug(1, "pid %d caught signal %d", getpid(), signo);
|
||||||
|
|
||||||
|
/* In foreground mode, treat SIGINT like SIGTERM */
|
||||||
|
if (!daemonize && signo == SIGINT)
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
55
0023-Proper-disconnect-of-TCP-connection.patch
Normal file
55
0023-Proper-disconnect-of-TCP-connection.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
From dc7560d404857c0540caed2f71f8e7c2e7307ab3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: gulams <64251312+gulams@users.noreply.github.com>
|
||||||
|
Date: Tue, 28 Apr 2020 13:03:50 +0530
|
||||||
|
Subject: [PATCH 162/170] Proper disconnect of TCP connection
|
||||||
|
|
||||||
|
1. Due to configuration issues, the logins from iSCSI initiator were getting rejected by the target
|
||||||
|
2. The initiator was retrying the login again and again
|
||||||
|
3. Each time the initiator tries to log in, the host number gets incremented by 1
|
||||||
|
4. At one point of time, the host number reached 65535
|
||||||
|
5. During the login process, once the TCP connection is established, the initiator tries to set the host parameters for the network interface if its not the default interface
|
||||||
|
6. While setting these host parameters, it will try to do a lookup of the host based upon the host number
|
||||||
|
7. The host number in "iscsi_uevent" structure is uint32_t. This is given as an argument to the scsi_host_lookup() function
|
||||||
|
8. This scsi_host_lookup() function takes it as unsigned short. So, when it receives the host number above 65535, the value is wrapped and starts from 0 again
|
||||||
|
9. Thus the incorrect value of host number is received by the scsi_host_lookup() function and hence it returns with error that the host is not existing in the list
|
||||||
|
10. Due to this "host not found error", the open-iscsi will retry this particular connection again and again
|
||||||
|
11. In this each retry, it will disconnect and then connect again with the same connection pointer, i.e it re-opens the connection multiple times till 120 seconds timeout
|
||||||
|
12. During these 120 seconds, observed that its trying to re-open the connection aroung 400+ times with each time disconnect and connect
|
||||||
|
13. After 120 seconds, the connection and session will be destroyed
|
||||||
|
14. So, while doing multiple retries of connect and disconnect during the 120 seconds, when the connect is successful it will try to bind the connection to the session
|
||||||
|
15. When it binds the connection and session, the reference count for the socket is incremented
|
||||||
|
16. When it disconnects, its trying to close the socket with close(sockfd) system call
|
||||||
|
17. This close() system call is entering into the kernel and NOT going forward till the networking layrer to call tcp_close() to send the FIN packet to the target
|
||||||
|
18. Its not going till tcp_close() because the reference count of the socket is still 1
|
||||||
|
19. So, the initiator is not sending the FIN packet to target and hence target is timing out and sending FIN after its timeout. This happens for all the retries (400+)
|
||||||
|
20. At some point, when this FIN packet is received by the initiator, the connection was destroyed and the memory was re-used for some other purpose and hence we see the panic
|
||||||
|
|
||||||
|
Fix:
|
||||||
|
==
|
||||||
|
Fix is to decrement the reference count of the socket fd after disconnect by calling the stop connection
|
||||||
|
|
||||||
|
Corrected the indentation for the change in the function iscsi_login_eh()
|
||||||
|
---
|
||||||
|
usr/initiator.c | 6 +-----
|
||||||
|
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/usr/initiator.c b/usr/initiator.c
|
||||||
|
index a07f9aa..5f4bdca 100644
|
||||||
|
--- a/usr/initiator.c
|
||||||
|
+++ b/usr/initiator.c
|
||||||
|
@@ -711,11 +711,7 @@ static void iscsi_login_eh(struct iscsi_conn *conn, struct queue_task *qtask,
|
||||||
|
!iscsi_retry_initial_login(conn))
|
||||||
|
session_conn_shutdown(conn, qtask, err);
|
||||||
|
else {
|
||||||
|
- session->reopen_cnt++;
|
||||||
|
- session->t->template->ep_disconnect(conn);
|
||||||
|
- if (iscsi_conn_connect(conn, qtask))
|
||||||
|
- queue_delayed_reopen(qtask,
|
||||||
|
- ISCSI_CONN_ERR_REOPEN_DELAY);
|
||||||
|
+ session_conn_reopen(conn, qtask, STOP_CONN_TERM);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case R_STAGE_SESSION_REDIRECT:
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
52
0024-Add-iscsi-init.service.patch
Normal file
52
0024-Add-iscsi-init.service.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From f37d5b653f9f251845db3f29b1a3dcb90ec89731 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Glombek <cglombek@redhat.com>
|
||||||
|
Date: Wed, 6 May 2020 02:08:59 +0200
|
||||||
|
Subject: [PATCH 163/170] Add iscsi-init.service
|
||||||
|
|
||||||
|
Per Fedora Packaging Guidelines [1], initial configuration of a service
|
||||||
|
should happen in a one-off init service in order to ensure idempotency,
|
||||||
|
and not in the %post directive of the RPM spec.
|
||||||
|
|
||||||
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1493296
|
||||||
|
|
||||||
|
[1]: https://docs.fedoraproject.org/en-US/packaging-guidelines/Initial_Service_Setup/
|
||||||
|
---
|
||||||
|
etc/systemd/iscsi-init.service | 8 ++++++++
|
||||||
|
etc/systemd/iscsi.service | 6 +++---
|
||||||
|
2 files changed, 11 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 etc/systemd/iscsi-init.service
|
||||||
|
|
||||||
|
diff --git a/etc/systemd/iscsi-init.service b/etc/systemd/iscsi-init.service
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..e058ff0
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/etc/systemd/iscsi-init.service
|
||||||
|
@@ -0,0 +1,8 @@
|
||||||
|
+[Unit]
|
||||||
|
+Description=One time configuration for iscsi.service
|
||||||
|
+ConditionPathExists=!/etc/iscsi/initiatorname.iscsi
|
||||||
|
+
|
||||||
|
+[Service]
|
||||||
|
+Type=oneshot
|
||||||
|
+RemainAfterExit=no
|
||||||
|
+ExecStart=/usr/bin/sh -c 'echo "InitiatorName=`/usr/sbin/iscsi-iname`" > /etc/iscsi/initiatorname.iscsi'
|
||||||
|
diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service
|
||||||
|
index 1c286d1..2f2bf81 100644
|
||||||
|
--- a/etc/systemd/iscsi.service
|
||||||
|
+++ b/etc/systemd/iscsi.service
|
||||||
|
@@ -2,9 +2,9 @@
|
||||||
|
Description=Login and scanning of iSCSI devices
|
||||||
|
Documentation=man:iscsiadm(8) man:iscsid(8)
|
||||||
|
Before=remote-fs.target
|
||||||
|
-After=network.target network-online.target iscsid.service
|
||||||
|
-Requires=iscsid.socket
|
||||||
|
-ConditionPathExists=/etc/iscsi/initiatorname.iscsi
|
||||||
|
+After=network.target network-online.target
|
||||||
|
+After=iscsid.service iscsi-init.service
|
||||||
|
+Requires=iscsid.socket iscsi-init.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
From 8d96cc47381a840e5e03384e8077ad238fd1adc4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lee Duncan <lduncan@suse.com>
|
||||||
|
Date: Wed, 3 Jun 2020 08:29:39 -0700
|
||||||
|
Subject: [PATCH 164/170] Fix issue with zero-length arrays at end of struct
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
A common practice in C coding, over the years, has been to
|
||||||
|
add a zero-length array at the end of the structure when trying
|
||||||
|
to represent a possibly-empty array of bytes that may be
|
||||||
|
appended to the struct. But the gcc-10 compiler does not
|
||||||
|
like such structures, taking the zero-length literally.
|
||||||
|
|
||||||
|
The following errors are fixed by this commit:
|
||||||
|
|
||||||
|
> iscsiadm.c: In function ‘session_stats’:
|
||||||
|
> iscsiadm.c:939:56: error: array subscript ‘(<unknown>) + -1’ is outside the bounds of an interior zero-length array ‘struct iscsi_stats_custom[0]’ [-Werror=zero-length-bounds]
|
||||||
|
> 939 | (unsigned long long)rsp.u.getstats.stats.custom[i].value);
|
||||||
|
> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
|
||||||
|
> In file included from initiator.h:29,
|
||||||
|
> from iscsiadm.c:36:
|
||||||
|
> ../include/iscsi_if.h:844:28: note: while referencing ‘custom’
|
||||||
|
> 844 | struct iscsi_stats_custom custom[0]
|
||||||
|
> | ^~~~~~
|
||||||
|
> iscsiadm.c:938:56: error: array subscript ‘(<unknown>) + -1’ is outside the bounds of an interior zero-length array ‘struct iscsi_stats_custom[0]’ [-Werror=zero-length-bounds]
|
||||||
|
> 938 | printf("\t%s: %llu\n", rsp.u.getstats.stats.custom[i].desc,
|
||||||
|
> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
|
||||||
|
> In file included from initiator.h:29,
|
||||||
|
> from iscsiadm.c:36:
|
||||||
|
> ../include/iscsi_if.h:844:28: note: while referencing ‘custom’
|
||||||
|
> 844 | struct iscsi_stats_custom custom[0]
|
||||||
|
> | ^~~~~~
|
||||||
|
> cc1: all warnings being treated as errors
|
||||||
|
|
||||||
|
The work around is to convert the two "custom[0]" structure members to
|
||||||
|
use "custom[]".
|
||||||
|
---
|
||||||
|
include/iscsi_if.h | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/iscsi_if.h b/include/iscsi_if.h
|
||||||
|
index 2d46214..5a1c614 100644
|
||||||
|
--- a/include/iscsi_if.h
|
||||||
|
+++ b/include/iscsi_if.h
|
||||||
|
@@ -841,7 +841,7 @@ struct iscsi_stats {
|
||||||
|
* up to ISCSI_STATS_CUSTOM_MAX
|
||||||
|
*/
|
||||||
|
uint32_t custom_length;
|
||||||
|
- struct iscsi_stats_custom custom[0]
|
||||||
|
+ struct iscsi_stats_custom custom[]
|
||||||
|
__attribute__ ((aligned (sizeof(uint64_t))));
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -972,7 +972,7 @@ struct iscsi_offload_host_stats {
|
||||||
|
* up to ISCSI_HOST_STATS_CUSTOM_MAX
|
||||||
|
*/
|
||||||
|
uint32_t custom_length;
|
||||||
|
- struct iscsi_host_stats_custom custom[0]
|
||||||
|
+ struct iscsi_host_stats_custom custom[]
|
||||||
|
__attribute__ ((aligned (sizeof(uint64_t))));
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
30
0026-Fix-a-compiler-complaint-about-writing-one-byte.patch
Normal file
30
0026-Fix-a-compiler-complaint-about-writing-one-byte.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From 10009f1c5fc01238be976867bc02be046325850b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lee Duncan <lduncan@suse.com>
|
||||||
|
Date: Wed, 3 Jun 2020 08:36:45 -0700
|
||||||
|
Subject: [PATCH 165/170] Fix a compiler complaint about writing one byte
|
||||||
|
|
||||||
|
When playing with IPv6 IP addresses, which are described
|
||||||
|
in C using a union, and the gcc-10 compiler didn't like
|
||||||
|
that we were not specifying which member of the union
|
||||||
|
we wanted to address of, when in fact all members have
|
||||||
|
the same address. The fix is to be more explicit.
|
||||||
|
---
|
||||||
|
iscsiuio/src/uip/ipv6.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/iscsiuio/src/uip/ipv6.c b/iscsiuio/src/uip/ipv6.c
|
||||||
|
index 05efa73..11cb4e9 100644
|
||||||
|
--- a/iscsiuio/src/uip/ipv6.c
|
||||||
|
+++ b/iscsiuio/src/uip/ipv6.c
|
||||||
|
@@ -519,7 +519,7 @@ static void ipv6_insert_protocol_chksum(struct ipv6_hdr *ipv6)
|
||||||
|
* SRC IP, DST IP, Protocol Data Length, and Next Header.
|
||||||
|
*/
|
||||||
|
sum = 0;
|
||||||
|
- ptr = (u16_t *)&ipv6->ipv6_src;
|
||||||
|
+ ptr = (u16_t *)&ipv6->ipv6_src.addr16[0];
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(struct ipv6_addr); i++) {
|
||||||
|
sum += HOST_TO_NET16(*ptr);
|
||||||
|
--
|
||||||
|
2.21.1 (Apple Git-122.3)
|
||||||
|
|
||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Name: open-iscsi
|
Name: open-iscsi
|
||||||
Version: 2.1.1
|
Version: 2.1.1
|
||||||
Release: 2
|
Release: 3
|
||||||
Summary: ISCSI software initiator daemon and utility programs
|
Summary: ISCSI software initiator daemon and utility programs
|
||||||
License: GPLv2+ and BSD
|
License: GPLv2+ and BSD
|
||||||
URL: http://www.open-iscsi.org
|
URL: http://www.open-iscsi.org
|
||||||
@ -28,6 +28,13 @@ Patch16: 0016-iscsi-fix-fd-leak.patch
|
|||||||
Patch17: 0017-Fix-devel-without-node-header-files.patch
|
Patch17: 0017-Fix-devel-without-node-header-files.patch
|
||||||
Patch18: 0018-resolve-compilation-errors.patch
|
Patch18: 0018-resolve-compilation-errors.patch
|
||||||
Patch19: 0019-Update-systemd-unit-files-for-iscsid.patch
|
Patch19: 0019-Update-systemd-unit-files-for-iscsid.patch
|
||||||
|
Patch20: 0020-Fix-iscsi.service-so-it-handles-restarts-better.patch
|
||||||
|
Patch21: 0021-Ignore-iface.example-in-iface-match-checks.patch
|
||||||
|
Patch22: 0022-Fix-SIGPIPE-loop-in-signal-handler.patch
|
||||||
|
Patch23: 0023-Proper-disconnect-of-TCP-connection.patch
|
||||||
|
Patch24: 0024-Add-iscsi-init.service.patch
|
||||||
|
Patch25: 0025-Fix-issue-with-zero-length-arrays-at-end-of-struct.patch
|
||||||
|
Patch26: 0026-Fix-a-compiler-complaint-about-writing-one-byte.patch
|
||||||
|
|
||||||
BuildRequires: flex bison doxygen kmod-devel systemd-units gcc git isns-utils-devel systemd-devel
|
BuildRequires: flex bison doxygen kmod-devel systemd-units gcc git isns-utils-devel systemd-devel
|
||||||
BuildRequires: autoconf automake libtool libmount-devel openssl-devel pkg-config gdb
|
BuildRequires: autoconf automake libtool libmount-devel openssl-devel pkg-config gdb
|
||||||
@ -160,6 +167,9 @@ fi
|
|||||||
%{_mandir}/man8/*
|
%{_mandir}/man8/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Oct 31 2020 haowenchao <haowenchao@huawei.com> - 2.1.1-3
|
||||||
|
- backport patches from epoch1
|
||||||
|
|
||||||
* Tue Sep 1 2020 wuguanghao <wuguanghao3@huawei.com> - 2.1.1-2
|
* Tue Sep 1 2020 wuguanghao <wuguanghao3@huawei.com> - 2.1.1-2
|
||||||
- backport one patch for solving install problem
|
- backport one patch for solving install problem
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user