From 5e5d13b822b33d68c7a1ff018251b6aded89c391 Mon Sep 17 00:00:00 2001 From: wujing Date: Thu, 24 Dec 2020 16:12:57 +0800 Subject: [PATCH] Streaming IO solution optimization and enhancement Signed-off-by: wujing --- ...olution-optimization-and-enhancement.patch | 92 +++++++++++++++++++ ...d-using-void-pointers-in-caclulation.patch | 40 ++++++++ lxc.spec | 10 +- series.conf | 4 + 4 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 0015-Streaming-IO-solution-optimization-and-enhancement.patch create mode 100644 0016-avoid-using-void-pointers-in-caclulation.patch diff --git a/0015-Streaming-IO-solution-optimization-and-enhancement.patch b/0015-Streaming-IO-solution-optimization-and-enhancement.patch new file mode 100644 index 0000000..6ecef27 --- /dev/null +++ b/0015-Streaming-IO-solution-optimization-and-enhancement.patch @@ -0,0 +1,92 @@ +From d19376d8735651b23394cdeb560cbebe374c8bb9 Mon Sep 17 00:00:00 2001 +From: wujing +Date: Wed, 21 Oct 2020 15:34:50 +0800 +Subject: [PATCH 2/3] Streaming IO solution optimization and enhancement + +Signed-off-by: wujing +--- + src/lxc/file_utils.c | 27 +++++++++++++++++++++++++++ + src/lxc/file_utils.h | 4 ++++ + src/lxc/terminal.c | 14 ++++++++++---- + 3 files changed, 41 insertions(+), 4 deletions(-) + +diff --git a/src/lxc/file_utils.c b/src/lxc/file_utils.c +index 1689cbaa..2dbbbd3b 100644 +--- a/src/lxc/file_utils.c ++++ b/src/lxc/file_utils.c +@@ -122,6 +122,33 @@ int lxc_read_from_file(const char *filename, void *buf, size_t count) + return ret; + } + ++#ifdef HAVE_ISULAD ++ssize_t lxc_write_nointr_for_fifo(int fd, const void *buf, size_t count) ++{ ++ ssize_t nret = 0; ++ ssize_t nwritten; ++ ++ if (buf == NULL) { ++ return -1; ++ } ++ ++ for (nwritten = 0; nwritten < count;) { ++ nret = write(fd, buf + nwritten, count - nwritten); ++ if (nret < 0) { ++ if (errno == EINTR || errno == EAGAIN) { ++ continue; ++ } else { ++ return nret; ++ } ++ } else { ++ nwritten += nret; ++ } ++ } ++ ++ return nwritten; ++} ++#endif ++ + ssize_t lxc_write_nointr(int fd, const void *buf, size_t count) + { + ssize_t ret; +diff --git a/src/lxc/file_utils.h b/src/lxc/file_utils.h +index 6d5dbf68..29162b3f 100644 +--- a/src/lxc/file_utils.h ++++ b/src/lxc/file_utils.h +@@ -58,4 +58,8 @@ extern FILE *fdopen_cached(int fd, const char *mode, void **caller_freed_buffer) + extern FILE *fopen_cached(const char *path, const char *mode, + void **caller_freed_buffer); + ++#ifdef HAVE_ISULAD ++extern ssize_t lxc_write_nointr_for_fifo(int fd, const void *buf, size_t count); ++#endif ++ + #endif /* __LXC_FILE_UTILS_H */ +diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c +index 7441de79..a4c6ad0c 100644 +--- a/src/lxc/terminal.c ++++ b/src/lxc/terminal.c +@@ -683,11 +683,17 @@ static void lxc_forward_data_to_fifo(struct lxc_list *list, bool is_err, const c + lxc_list_for_each_safe(it, list, next) { + elem = it->elem; + if (is_err) { +- if (elem->err_fd >= 0) +- lxc_write_nointr(elem->err_fd, buf, r); ++ if (elem->err_fd >= 0) { ++ if (lxc_write_nointr_for_fifo(elem->err_fd, buf, r) < 0) { ++ ERROR("Failed to write to fifo fd %d with error: %s", elem->err_fd, strerror(errno)); ++ } ++ } + } else { +- if (elem->out_fd >= 0) +- lxc_write_nointr(elem->out_fd, buf, r); ++ if (elem->out_fd >= 0) { ++ if (lxc_write_nointr_for_fifo(elem->out_fd, buf, r) < 0) { ++ ERROR("Failed to write to fifo fd %d with error: %s", elem->out_fd, strerror(errno)); ++ } ++ } + } + } + +-- +2.25.1 + diff --git a/0016-avoid-using-void-pointers-in-caclulation.patch b/0016-avoid-using-void-pointers-in-caclulation.patch new file mode 100644 index 0000000..2b07828 --- /dev/null +++ b/0016-avoid-using-void-pointers-in-caclulation.patch @@ -0,0 +1,40 @@ +From 1912d374c6fbabc9ac549011cd863c28ee1a55fa Mon Sep 17 00:00:00 2001 +From: wujing +Date: Thu, 24 Dec 2020 11:23:01 +0800 +Subject: [PATCH 3/3] avoid using void pointers in caclulation + +Signed-off-by: wujing +--- + src/lxc/file_utils.c | 2 +- + src/lxc/file_utils.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/lxc/file_utils.c b/src/lxc/file_utils.c +index 2dbbbd3b..681207b2 100644 +--- a/src/lxc/file_utils.c ++++ b/src/lxc/file_utils.c +@@ -123,7 +123,7 @@ int lxc_read_from_file(const char *filename, void *buf, size_t count) + } + + #ifdef HAVE_ISULAD +-ssize_t lxc_write_nointr_for_fifo(int fd, const void *buf, size_t count) ++ssize_t lxc_write_nointr_for_fifo(int fd, const char *buf, size_t count) + { + ssize_t nret = 0; + ssize_t nwritten; +diff --git a/src/lxc/file_utils.h b/src/lxc/file_utils.h +index 29162b3f..cb959bfb 100644 +--- a/src/lxc/file_utils.h ++++ b/src/lxc/file_utils.h +@@ -59,7 +59,7 @@ extern FILE *fopen_cached(const char *path, const char *mode, + void **caller_freed_buffer); + + #ifdef HAVE_ISULAD +-extern ssize_t lxc_write_nointr_for_fifo(int fd, const void *buf, size_t count); ++extern ssize_t lxc_write_nointr_for_fifo(int fd, const char *buf, size_t count); + #endif + + #endif /* __LXC_FILE_UTILS_H */ +-- +2.25.1 + diff --git a/lxc.spec b/lxc.spec index bef5e75..394b2ac 100644 --- a/lxc.spec +++ b/lxc.spec @@ -1,4 +1,4 @@ -%global _release 2020121501 +%global _release 2020122401 Name: lxc Version: 4.0.3 @@ -22,6 +22,8 @@ Patch0011: 0011-rootfs-add-make-private-for-root.path-parent.patch Patch0012: 0012-mount-make-possible-to-bind-mount-proc-and-sys-fs.patch Patch0013: 0013-use-path-based-unix-domain-sockets-instead-of-abstra.patch Patch0014: 0014-api-add-get-container-metrics-api.patch +Patch0015: 0015-Streaming-IO-solution-optimization-and-enhancement.patch +Patch0016: 0016-avoid-using-void-pointers-in-caclulation.patch BuildRequires: systemd-units git libtool graphviz docbook2X doxygen chrpath BuildRequires: pkgconfig(libseccomp) @@ -193,6 +195,12 @@ make check %{_mandir}/*/man7/%{name}* %changelog +* Thu Dec 24 2020 wujing - 4.0.3-2020122401 +- Type:enhancement +- ID:NA +- SUG:NA +- DESC: Streaming IO solution optimization and enhancement + * Tue Dec 15 2020 lifeng - 4.0.3-2020121501 - Type:enhancement - ID:NA diff --git a/series.conf b/series.conf index a4b2341..9fc66f1 100644 --- a/series.conf +++ b/series.conf @@ -10,3 +10,7 @@ 0010-cgfsng-adjust-log-level-from-error-to-warn.patch 0011-rootfs-add-make-private-for-root.path-parent.patch 0012-mount-make-possible-to-bind-mount-proc-and-sys-fs.patch +0013-use-path-based-unix-domain-sockets-instead-of-abstra.patch +0014-api-add-get-container-metrics-api.patch +0015-Streaming-IO-solution-optimization-and-enhancement.patch +0016-avoid-using-void-pointers-in-caclulation.patch -- Gitee