diff --git a/0001-systemd.patch b/0001-systemd.patch index 5145981fbe8eefce881429dcb4f00d87647fbc5f..53fc98c94ed93415251d7fb5c8e5e6280f432d2a 100644 --- a/0001-systemd.patch +++ b/0001-systemd.patch @@ -1,5 +1,14 @@ +From fdc8835afc38ba10f2d1ef97d19a631e58552a27 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 11:03:32 +0800 +Subject: [PATCH 01/18] systemd + +--- + config/init/systemd/lxcfs.service.in | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + diff --git a/config/init/systemd/lxcfs.service.in b/config/init/systemd/lxcfs.service.in -index 9cd4e59..2421a54 100644 +index 9cd4e59..3d763c6 100644 --- a/config/init/systemd/lxcfs.service.in +++ b/config/init/systemd/lxcfs.service.in @@ -5,12 +5,16 @@ Before=lxc.service @@ -22,3 +31,6 @@ index 9cd4e59..2421a54 100644 [Install] WantedBy=multi-user.target +-- +2.32.0 (Apple Git-132) + diff --git a/0002-remove-sysvinit-upstart.patch b/0002-remove-sysvinit-upstart.patch index b86963cfe01445c4b41a35671687140a98f8edd3..cb0a0d7e9ff33cdd5e327192d187c2253fdf8653 100644 --- a/0002-remove-sysvinit-upstart.patch +++ b/0002-remove-sysvinit-upstart.patch @@ -1,3 +1,13 @@ +From 246b0b52ad671fc37a2bc289701260e5128ecd1f Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 11:11:05 +0800 +Subject: [PATCH 02/18] remove-sysvinit-upstart + +--- + config/init/Makefile.am | 2 +- + configure.ac | 2 -- + 2 files changed, 1 insertion(+), 3 deletions(-) + diff --git a/config/init/Makefile.am b/config/init/Makefile.am index e2ffe28..3439c97 100644 --- a/config/init/Makefile.am @@ -6,10 +16,10 @@ index e2ffe28..3439c97 100644 -SUBDIRS = systemd sysvinit upstart +SUBDIRS = systemd diff --git a/configure.ac b/configure.ac -index 3dc4571..5653dfd 100644 +index ccea4ec..d15ac50 100644 --- a/configure.ac +++ b/configure.ac -@@ -44,8 +44,6 @@ AC_CONFIG_FILES([ +@@ -45,8 +45,6 @@ AC_CONFIG_FILES([ config/init/Makefile config/init/systemd/Makefile config/init/systemd/lxcfs.service @@ -18,3 +28,6 @@ index 3dc4571..5653dfd 100644 doc/Makefile +-- +2.32.0 (Apple Git-132) + diff --git a/0003-show-dev-name-in-container.patch b/0003-show-dev-name-in-container.patch index a4a04638078f2ef5bc5f2a03866bc045c8631adb..748893ba732b87bee359efc43f5832ae2aaed1d9 100644 --- a/0003-show-dev-name-in-container.patch +++ b/0003-show-dev-name-in-container.patch @@ -1,16 +1,25 @@ +From d6234626d7240952da42902b7ef513d56d5a18a7 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 11:32:37 +0800 +Subject: [PATCH 03/18] show-dev-name-in-container + +--- + src/proc_fuse.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 143 insertions(+), 2 deletions(-) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index a99162c..b4f4129 100644 +index 94168c9..7372a36 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -37,6 +37,7 @@ +@@ -27,6 +27,7 @@ #include #include #include +#include #include - #include "bindings.h" -@@ -374,6 +375,132 @@ static void get_blkio_io_value(char *str, unsigned major, unsigned minor, + #include "proc_fuse.h" +@@ -448,6 +449,132 @@ static void get_blkio_io_value(char *str, unsigned major, unsigned minor, } } @@ -120,8 +129,8 @@ index a99162c..b4f4129 100644 + end->minor = minor(dev_num); + } +err: -+ if (stream) -+ fclose(stream); ++ if (stream) ++ fclose(stream); + if (child_pid > 0) + wait_for_pid(child_pid); + return head; @@ -140,18 +149,18 @@ index a99162c..b4f4129 100644 + } +} + - static int proc_diskstats_read(char *buf, size_t size, off_t offset, - struct fuse_file_info *fi) - { -@@ -385,6 +512,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + struct lxcfs_diskstats { + unsigned int major; /* 1 - major number */ + unsigned int minor; /* 2 - minor mumber */ +@@ -480,6 +607,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, __do_fclose FILE *f = NULL; struct fuse_context *fc = fuse_get_context(); struct file_info *d = INTTYPE_TO_PTR(fi->fh); + struct devinfo *container_devinfo = NULL, *ptr = NULL; - uint64_t read = 0, write = 0; - uint64_t read_merged = 0, write_merged = 0; - uint64_t read_sectors = 0, write_sectors = 0; -@@ -458,13 +586,22 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + struct lxcfs_diskstats stats = {}; + /* helper fields */ + uint64_t read_service_time, write_service_time, discard_service_time, read_wait_time, +@@ -549,13 +677,22 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, if (!f) return 0; @@ -161,20 +170,20 @@ index a99162c..b4f4129 100644 ssize_t l; char lbuf[256]; -+ memset(dev_name, 0, sizeof(dev_name)); - i = sscanf(line, "%u %u %71s", &major, &minor, dev_name); ++ memset(stats.dev_name, 0, sizeof(stats.dev_name)); + i = sscanf(line, "%u %u %71s", &stats.major, &stats.minor, stats.dev_name); if (i != 3) continue; + for (ptr = container_devinfo; ptr != NULL; ptr = ptr->next) { -+ if (major == ptr->major && minor == ptr->minor) { -+ snprintf(dev_name, sizeof(dev_name), "%s", ptr->name); -+ dev_name[71] = '\0'; ++ if (stats.major == ptr->major && stats.minor == ptr->minor) { ++ snprintf(stats.dev_name, sizeof(stats.dev_name), "%s", ptr->name); ++ stats.dev_name[71] = '\0'; + } + } - get_blkio_io_value(io_serviced_str, major, minor, "Read", &read); - get_blkio_io_value(io_serviced_str, major, minor, "Write", &write); -@@ -499,10 +636,14 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Read", &stats.read); + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Write", &stats.write); +@@ -620,10 +757,14 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, continue; l = snprintf(cache, cache_size, "%s", lbuf); @@ -182,12 +191,15 @@ index a99162c..b4f4129 100644 + if (l < 0) { + free_devinfo_list(container_devinfo); return log_error(0, "Failed to write cache"); -- if (l >= cache_size) +- if ((size_t)l >= cache_size) + } -+ if (l >= cache_size) { ++ if ((size_t)l >= cache_size) { + free_devinfo_list(container_devinfo); return log_error(0, "Write to cache was truncated"); + } cache += l; cache_size -= l; +-- +2.32.0 (Apple Git-132) + diff --git a/0004-lxcfs-fix-cpuinfo-print.patch b/0004-lxcfs-fix-cpuinfo-print.patch index b5e83c272b8ce2f2c4c9b05ddd3efe8a9df4309b..d5b479bbe5ea5eca7e0863029c245534d195c2c7 100644 --- a/0004-lxcfs-fix-cpuinfo-print.patch +++ b/0004-lxcfs-fix-cpuinfo-print.patch @@ -1,8 +1,17 @@ +From 1901edf2908551cf862f3deabf23acbda55d2dea Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 11:52:05 +0800 +Subject: [PATCH 04/18] lxcfs-fix-cpuinfo-print + +--- + src/proc_cpuview.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + diff --git a/src/proc_cpuview.c b/src/proc_cpuview.c -index 7d6c0bd..3311c27 100644 +index 9f6a55e..75006a6 100644 --- a/src/proc_cpuview.c +++ b/src/proc_cpuview.c -@@ -952,7 +952,17 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset, +@@ -970,7 +970,17 @@ int proc_cpuinfo_read(char *buf, size_t size, off_t offset, } if (am_printing) { @@ -20,4 +29,7 @@ index 7d6c0bd..3311c27 100644 + } if (l < 0) return log_error(0, "Failed to write cache"); - if (l >= cache_size) + if ((size_t)l >= cache_size) +-- +2.32.0 (Apple Git-132) + diff --git a/0005-fix-memory-leak.patch b/0005-fix-memory-leak.patch index 3c7f168080a10cb1a5f017a7a836d38fd50f29d6..e3c82e7b12591661e82bf12070b645f98e1aec82 100644 --- a/0005-fix-memory-leak.patch +++ b/0005-fix-memory-leak.patch @@ -1,17 +1,26 @@ +From a4f9b85c4ed1cc5128bcb6650cc8989310558769 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 12:06:31 +0800 +Subject: [PATCH 05/18] fix-memory-leak + +--- + src/proc_fuse.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index b4f4129..6b503d6 100644 +index 7372a36..bcd624d 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -224,6 +224,8 @@ static uint64_t get_min_memlimit(const char *cgroup, bool swap) +@@ -278,6 +278,8 @@ static uint64_t get_min_memlimit(const char *cgroup, bool swap) return log_error_errno(0, ENOMEM, "Failed to allocate memory"); retlimit = get_memlimit(copy, swap); + if (retlimit == 0) -+ return retlimit; ++ return 0; - while (strcmp(copy, "/") != 0) { - char *it = copy; -@@ -283,6 +285,8 @@ static int proc_swaps_read(char *buf, size_t size, off_t offset, + /* + * If the cgroup doesn't start with / (probably won't happen), dirname() +@@ -346,6 +348,8 @@ static int proc_swaps_read(char *buf, size_t size, off_t offset, prune_init_slice(cgroup); memlimit = get_min_memlimit(cgroup, false); @@ -20,7 +29,7 @@ index b4f4129..6b503d6 100644 ret = cgroup_ops->get_memory_current(cgroup_ops, cgroup, &memusage_str); if (ret < 0) -@@ -1209,6 +1213,8 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset, +@@ -1329,6 +1333,8 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset, return read_file_fuse("/proc/meminfo", buf, size, d); memlimit = get_min_memlimit(cgroup, false); @@ -29,7 +38,7 @@ index b4f4129..6b503d6 100644 /* * Following values are allowed to fail, because swapaccount might be -@@ -1237,9 +1243,9 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset, +@@ -1361,9 +1367,9 @@ static int proc_meminfo_read(char *buf, size_t size, off_t offset, memusage /= 1024; memlimit /= 1024; @@ -40,3 +49,6 @@ index b4f4129..6b503d6 100644 memset(lbuf, 0, 100); if (startswith(line, "MemTotal:")) { +-- +2.32.0 (Apple Git-132) + diff --git a/0006-fix-concurrency-problem.patch b/0006-fix-concurrency-problem.patch index fa2f77d7b5952972297de229503fad5bd30cdb9f..34ec02b4e4661760a0535c108d245f8935da9bde 100644 --- a/0006-fix-concurrency-problem.patch +++ b/0006-fix-concurrency-problem.patch @@ -1,8 +1,19 @@ +From 90fc9cd959bc6231eb3ddad5c74865d35e9f372d Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 14:12:57 +0800 +Subject: [PATCH 06/18] fix-concurrency-problem + +--- + src/cgroups/cgroup_utils.c | 21 +++++++++++++-------- + src/cgroups/cgroup_utils.h | 2 +- + src/proc_fuse.c | 3 +++ + 3 files changed, 17 insertions(+), 9 deletions(-) + diff --git a/src/cgroups/cgroup_utils.c b/src/cgroups/cgroup_utils.c -index 078f864..c21e7bc 100644 +index 83e4cbf..1224971 100644 --- a/src/cgroups/cgroup_utils.c +++ b/src/cgroups/cgroup_utils.c -@@ -521,23 +521,28 @@ static char *copy_to_eol(char *p) +@@ -512,23 +512,28 @@ static char *copy_to_eol(char *p) return sret; } @@ -37,7 +48,7 @@ index 078f864..c21e7bc 100644 } static inline void drop_trailing_newlines(char *s) -@@ -561,7 +566,7 @@ char *read_file(const char *fnam) +@@ -552,7 +557,7 @@ char *read_file(const char *fnam) if (!f) return NULL; while ((linelen = getline(&line, &len, f)) != -1) { @@ -46,7 +57,7 @@ index 078f864..c21e7bc 100644 fulllen += linelen; } return buf; -@@ -691,7 +696,7 @@ char *readat_file(int dirfd, const char *path) +@@ -682,7 +687,7 @@ char *readat_file(int dirfd, const char *path) move_fd(fd); while ((linelen = getline(&line, &len, f)) != -1) { @@ -56,10 +67,10 @@ index 078f864..c21e7bc 100644 } diff --git a/src/cgroups/cgroup_utils.h b/src/cgroups/cgroup_utils.h -index d1f5639..a40bdf5 100644 +index f431686..d4c8598 100644 --- a/src/cgroups/cgroup_utils.h +++ b/src/cgroups/cgroup_utils.h -@@ -79,7 +79,7 @@ extern size_t strlcat(char *d, const char *s, size_t n); +@@ -70,7 +70,7 @@ extern size_t strlcat(char *d, const char *s, size_t n); #endif extern FILE *fopen_cloexec(const char *path, const char *mode); @@ -69,16 +80,19 @@ index d1f5639..a40bdf5 100644 extern char *readat_file(int fd, const char *path); extern char *read_file_strip_newline(const char *fnam); diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 6b503d6..334f6ea 100644 +index bcd624d..0aaab71 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -1403,6 +1403,9 @@ __lxcfs_fuse_ops int proc_read(const char *path, char *buf, size_t size, +@@ -1530,6 +1530,9 @@ __lxcfs_fuse_ops int proc_read(const char *path, char *buf, size_t size, { struct file_info *f = INTTYPE_TO_PTR(fi->fh); -+ if (!f->buf) ++ if (!f->buf) + return -EINVAL; -+ ++ switch (f->type) { case LXC_TYPE_PROC_MEMINFO: if (liblxcfs_functional()) +-- +2.32.0 (Apple Git-132) + diff --git a/0007-set-null-after-free.patch b/0007-set-null-after-free.patch index 82a628a820b68ccb6a228c49cc84191b062cbb7c..e9d01492b391e272cb2a92aaa4dc6f65db62ed89 100644 --- a/0007-set-null-after-free.patch +++ b/0007-set-null-after-free.patch @@ -1,8 +1,22 @@ +From 7691f5c4a87d5fbc0f48fa96bba70b4ab9b52c65 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 14:45:12 +0800 +Subject: [PATCH 07/18] set-null-after-free + +--- + src/cgroup_fuse.c | 26 +++++++++++++++++++++----- + src/cgroups/cgfsng.c | 5 ++++- + src/cgroups/cgroup_utils.c | 4 +++- + src/lxcfs.c | 4 ++++ + src/memory_utils.h | 4 +++- + src/proc_loadavg.c | 5 ++++- + 6 files changed, 39 insertions(+), 9 deletions(-) + diff --git a/src/cgroup_fuse.c b/src/cgroup_fuse.c -index d4bdac1..76507f1 100644 +index 5c22fd1..b396bbc 100644 --- a/src/cgroup_fuse.c +++ b/src/cgroup_fuse.c -@@ -187,7 +187,7 @@ static bool is_child_cgroup(const char *controller, const char *cgroup, +@@ -179,7 +179,7 @@ static bool is_child_cgroup(const char *controller, const char *cgroup, static bool caller_may_see_dir(pid_t pid, const char *contrl, const char *cg) { bool answer = false; @@ -11,7 +25,7 @@ index d4bdac1..76507f1 100644 size_t target_len, task_len; if (strcmp(cg, "/") == 0 || strcmp(cg, "./") == 0) -@@ -229,6 +229,7 @@ static bool caller_may_see_dir(pid_t pid, const char *contrl, const char *cg) +@@ -221,6 +221,7 @@ static bool caller_may_see_dir(pid_t pid, const char *contrl, const char *cg) out: free(c2); @@ -19,7 +33,7 @@ index d4bdac1..76507f1 100644 return answer; } -@@ -268,8 +269,8 @@ static char *get_next_cgroup_dir(const char *taskcg, const char *querycg) +@@ -260,8 +261,8 @@ static char *get_next_cgroup_dir(const char *taskcg, const char *querycg) static bool caller_is_in_ancestor(pid_t pid, const char *contrl, const char *cg, char **nextcg) { bool answer = false; @@ -30,7 +44,7 @@ index d4bdac1..76507f1 100644 c2 = get_pid_cgroup_handle_named(pid, contrl); if (!c2) -@@ -299,6 +300,7 @@ static bool caller_is_in_ancestor(pid_t pid, const char *contrl, const char *cg, +@@ -291,6 +292,7 @@ static bool caller_is_in_ancestor(pid_t pid, const char *contrl, const char *cg, out: free(c2); @@ -38,7 +52,7 @@ index d4bdac1..76507f1 100644 return answer; } -@@ -618,6 +620,7 @@ __lxcfs_fuse_ops int cg_getattr(const char *path, struct stat *sb) +@@ -612,6 +614,7 @@ __lxcfs_fuse_ops int cg_getattr(const char *path, struct stat *sb) out: free(cgdir); @@ -46,7 +60,7 @@ index d4bdac1..76507f1 100644 return ret; } -@@ -740,7 +743,9 @@ __lxcfs_fuse_ops int cg_mkdir(const char *path, mode_t mode) +@@ -734,7 +737,9 @@ __lxcfs_fuse_ops int cg_mkdir(const char *path, mode_t mode) out: free(cgdir); @@ -56,7 +70,7 @@ index d4bdac1..76507f1 100644 return ret; } -@@ -875,7 +880,9 @@ __lxcfs_fuse_ops int cg_rmdir(const char *path) +@@ -869,7 +874,9 @@ __lxcfs_fuse_ops int cg_rmdir(const char *path) out: free(cgdir); @@ -66,7 +80,7 @@ index d4bdac1..76507f1 100644 return ret; } -@@ -964,6 +971,7 @@ __lxcfs_fuse_ops int cg_chmod(const char *path, mode_t mode) +@@ -958,6 +965,7 @@ __lxcfs_fuse_ops int cg_chmod(const char *path, mode_t mode) out: free_key(k); free(cgdir); @@ -74,15 +88,16 @@ index d4bdac1..76507f1 100644 return ret; } -@@ -1073,6 +1081,7 @@ __lxcfs_fuse_ops int cg_chown(const char *path, uid_t uid, gid_t gid) +@@ -1067,7 +1075,7 @@ __lxcfs_fuse_ops int cg_chown(const char *path, uid_t uid, gid_t gid) out: free_key(k); free(cgdir); +- + cgdir = NULL; - return ret; } -@@ -1145,6 +1154,7 @@ __lxcfs_fuse_ops int cg_open(const char *path, struct fuse_file_info *fi) + +@@ -1139,6 +1147,7 @@ __lxcfs_fuse_ops int cg_open(const char *path, struct fuse_file_info *fi) out: free(cgdir); @@ -90,7 +105,7 @@ index d4bdac1..76507f1 100644 return ret; } -@@ -1286,6 +1296,7 @@ static bool do_read_pids(pid_t tpid, const char *contrl, const char *cg, +@@ -1280,6 +1289,7 @@ static bool do_read_pids(pid_t tpid, const char *contrl, const char *cg, if (socketpair(AF_UNIX, SOCK_DGRAM, 0, sock) < 0) { perror("socketpair"); free(tmpdata); @@ -98,7 +113,7 @@ index d4bdac1..76507f1 100644 return false; } -@@ -1337,6 +1348,7 @@ next: +@@ -1331,6 +1341,7 @@ next: out: free(tmpdata); @@ -106,7 +121,7 @@ index d4bdac1..76507f1 100644 if (cpid != -1) wait_for_pid(cpid); if (sock[0] != -1) { -@@ -1413,6 +1425,7 @@ __lxcfs_fuse_ops int cg_read(const char *path, char *buf, size_t size, +@@ -1408,6 +1419,7 @@ __lxcfs_fuse_ops int cg_read(const char *path, char *buf, size_t size, out: free(data); @@ -114,15 +129,15 @@ index d4bdac1..76507f1 100644 return ret; } -@@ -1989,6 +2002,7 @@ __lxcfs_fuse_ops int cg_readdir(const char *path, void *buf, +@@ -1989,6 +2001,7 @@ __lxcfs_fuse_ops int cg_readdir(const char *path, void *buf, if (nextcg) { - ret = filler(buf, nextcg, NULL, 0); + ret = DIR_FILLER(filler, buf, nextcg, NULL, 0); free(nextcg); + nextcg = NULL; if (ret != 0) { ret = -EIO; goto out; -@@ -2024,9 +2038,12 @@ __lxcfs_fuse_ops int cg_readdir(const char *path, void *buf, +@@ -2024,8 +2037,10 @@ __lxcfs_fuse_ops int cg_readdir(const char *path, void *buf, out: free_keys(list); if (clist) { @@ -130,13 +145,11 @@ index d4bdac1..76507f1 100644 + for (i = 0; clist[i]; i++) { free(clist[i]); + clist[i] = NULL; -+ } ++ } free(clist); -+ clist = NULL; } return ret; - } -@@ -2095,5 +2112,6 @@ __lxcfs_fuse_ops int cg_access(const char *path, int mode) +@@ -2095,5 +2110,6 @@ __lxcfs_fuse_ops int cg_access(const char *path, int mode) out: free(cgdir); @@ -144,10 +157,10 @@ index d4bdac1..76507f1 100644 return ret; } diff --git a/src/cgroups/cgfsng.c b/src/cgroups/cgfsng.c -index cf891b3..ca80a75 100644 +index 3eb4227..781923c 100644 --- a/src/cgroups/cgfsng.c +++ b/src/cgroups/cgfsng.c -@@ -878,7 +878,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops) +@@ -875,7 +875,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops) prune_init_scope(base_cgroup); if (type == CGROUP2_SUPER_MAGIC) { @@ -156,7 +169,7 @@ index cf891b3..ca80a75 100644 cgv2_ctrl_path = must_make_path(mountpoint, base_cgroup, "cgroup.controllers", -@@ -886,6 +886,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops) +@@ -883,6 +883,7 @@ static int cg_hybrid_init(struct cgroup_ops *ops) controller_list = cg_unified_get_controllers(cgv2_ctrl_path); free(cgv2_ctrl_path); @@ -164,7 +177,7 @@ index cf891b3..ca80a75 100644 if (!controller_list) controller_list = cg_unified_make_empty_controller(); } -@@ -900,7 +901,9 @@ static int cg_hybrid_init(struct cgroup_ops *ops) +@@ -897,7 +898,9 @@ static int cg_hybrid_init(struct cgroup_ops *ops) next: free_string_list(controller_list); free(mountpoint); @@ -175,10 +188,10 @@ index cf891b3..ca80a75 100644 free_string_list(klist); diff --git a/src/cgroups/cgroup_utils.c b/src/cgroups/cgroup_utils.c -index c21e7bc..521ec8b 100644 +index 1224971..d32a520 100644 --- a/src/cgroups/cgroup_utils.c +++ b/src/cgroups/cgroup_utils.c -@@ -710,7 +710,7 @@ bool mkdir_p(const char *dir, mode_t mode) +@@ -701,7 +701,7 @@ bool mkdir_p(const char *dir, mode_t mode) { const char *tmp = dir; const char *orig = dir; @@ -187,7 +200,7 @@ index c21e7bc..521ec8b 100644 do { dir = tmp + strspn(tmp, "/"); -@@ -722,9 +722,11 @@ bool mkdir_p(const char *dir, mode_t mode) +@@ -713,9 +713,11 @@ bool mkdir_p(const char *dir, mode_t mode) lxcfs_error("Failed to create directory '%s': %s.\n", makeme, strerror(errno)); free(makeme); @@ -200,22 +213,37 @@ index c21e7bc..521ec8b 100644 return true; diff --git a/src/lxcfs.c b/src/lxcfs.c -index 94256d4..2251a20 100644 +index e24ebed..361ce71 100644 --- a/src/lxcfs.c +++ b/src/lxcfs.c -@@ -1130,6 +1130,7 @@ int main(int argc, char *argv[]) - } else { - lxcfs_error("Warning: unexpected fuse option %s", v); - free(v); -+ v = NULL; - exit(EXIT_FAILURE); +@@ -1237,10 +1237,12 @@ int main(int argc, char *argv[]) + if (append_comma_separate(&new_fuse_opts, token)) { + lxcfs_error("Failed to copy fuse argument \"%s\"", token); + free(dup); ++ dup = NULL; + goto out; } } + free(dup); ++ dup = NULL; + } + + if (append_comma_separate(&new_fuse_opts, "allow_other,entry_timeout=0.5,attr_timeout=0.5")) { +@@ -1306,7 +1308,9 @@ out: + if (pidfile) + unlink(pidfile); + free(new_fuse_opts); ++ new_fuse_opts = NULL; + free(opts); ++ opts = NULL; + close_prot_errno_disarm(pidfile_fd); + exit(ret); + } diff --git a/src/memory_utils.h b/src/memory_utils.h -index 2916f56..c903d48 100644 +index c689c8e..a7e4a58 100644 --- a/src/memory_utils.h +++ b/src/memory_utils.h -@@ -65,8 +65,10 @@ static inline void free_disarm_function(void *ptr) +@@ -67,8 +67,10 @@ static inline void free_disarm_function(void *ptr) static inline void free_string_list(char **list) { if (list) { @@ -223,15 +251,15 @@ index 2916f56..c903d48 100644 + for (int i = 0; list[i]; i++) { free(list[i]); + list[i] = NULL; -+ } ++ } free_disarm(list); } } diff --git a/src/proc_loadavg.c b/src/proc_loadavg.c -index 7a7a39e..84787a9 100644 +index 5f9bec7..c8daf35 100644 --- a/src/proc_loadavg.c +++ b/src/proc_loadavg.c -@@ -445,10 +445,13 @@ static int refresh_load(struct load_node *p, const char *path) +@@ -436,10 +436,13 @@ static int refresh_load(struct load_node *p, const char *path) p->last_pid = last_pid; err_out: @@ -239,10 +267,13 @@ index 7a7a39e..84787a9 100644 + for (; i > 0; i--) { free(idbuf[i - 1]); + idbuf[i - 1] = NULL; -+ } ++ } out: free(idbuf); + idbuf = NULL; return sum; } +-- +2.32.0 (Apple Git-132) + diff --git a/0008-fix-hang.patch b/0008-fix-hang.patch index 93af58562c62e617ad35ac856276c1a5509cc0ee..9eda19a02222e327e3be7bb52fb2be9dbcc5c74c 100644 --- a/0008-fix-hang.patch +++ b/0008-fix-hang.patch @@ -1,8 +1,17 @@ +From 0025ea3988eefdf9a7a0eff5d55d2524c105c485 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 14:54:20 +0800 +Subject: [PATCH 08/18] fix-hang + +--- + src/proc_fuse.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 334f6ea..3ceba73 100644 +index 0aaab71..48c4e68 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -51,6 +51,26 @@ +@@ -43,6 +43,26 @@ #include "proc_cpuview.h" #include "utils.h" @@ -29,7 +38,7 @@ index 334f6ea..3ceba73 100644 struct memory_stat { uint64_t hierarchical_memory_limit; uint64_t hierarchical_memsw_limit; -@@ -418,6 +438,16 @@ struct devinfo* container_dev_read(pid_t pid) { +@@ -492,6 +512,16 @@ struct devinfo* container_dev_read(pid_t pid) { return head; } if (child_pid == 0) { @@ -46,7 +55,7 @@ index 334f6ea..3ceba73 100644 close(mypipe[0]); stream = fdopen(mypipe[1], "w"); if (stream == NULL) { -@@ -464,6 +494,8 @@ child_out: +@@ -538,6 +568,8 @@ child_out: lxcfs_error("Error opening pipe for reading: %s\n", strerror(errno)); goto err; } @@ -55,7 +64,7 @@ index 334f6ea..3ceba73 100644 while (fscanf(stream, "%100s%d", dev_name, &dev_num) == 2) { if (dev_num == 0) { break; -@@ -590,7 +622,9 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, +@@ -681,7 +713,9 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, if (!f) return 0; @@ -65,3 +74,6 @@ index 334f6ea..3ceba73 100644 while (getline(&line, &linelen, f) != -1) { ssize_t l; +-- +2.32.0 (Apple Git-132) + diff --git a/0009-limit-stat-by-quota-period-setting.patch b/0009-limit-stat-by-quota-period-setting.patch index 1a14cbf6e0721d2954483050496f129392dceac8..f32cd14fbb2f3759c862444e12485468f3cbcdb5 100644 --- a/0009-limit-stat-by-quota-period-setting.patch +++ b/0009-limit-stat-by-quota-period-setting.patch @@ -1,8 +1,26 @@ +From b0097ee3a4b0ac445271badac153293053bd03e1 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Tue, 30 Nov 2021 15:10:23 +0800 +Subject: [PATCH 09/18] limit-stat-by-quota-period-setting + +--- + src/proc_fuse.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 3ceba73..5162a3b 100644 +index 48c4e68..c6c32c7 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -910,6 +910,8 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, +@@ -549,7 +549,7 @@ struct devinfo* container_dev_read(pid_t pid) { + memset(fpath, 0, sizeof(fpath)); + snprintf(fpath, 99, "/dev/%s", ptr->d_name); + stat(fpath, &dev_stat); +- fprintf(stream, "%s %d ", ptr->d_name, dev_stat.st_rdev); ++ fprintf(stream, "%s %ld ", ptr->d_name, dev_stat.st_rdev); + fflush(stream); + } + closedir(dir); +@@ -1031,6 +1031,8 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, size_t linelen = 0, total_len = 0; int curcpu = -1; /* cpu numbering starts at 0 */ int physcpu = 0; @@ -11,7 +29,7 @@ index 3ceba73..5162a3b 100644 uint64_t user = 0, nice = 0, system = 0, idle = 0, iowait = 0, irq = 0, softirq = 0, steal = 0, guest = 0, guest_nice = 0; uint64_t user_sum = 0, nice_sum = 0, system_sum = 0, idle_sum = 0, -@@ -958,6 +960,13 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, +@@ -1079,6 +1081,13 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, if (!cpuset) return 0; @@ -25,7 +43,7 @@ index 3ceba73..5162a3b 100644 f = fopen_cached("/proc/stat", "re", &fopen_cache); if (!f) return 0; -@@ -1006,6 +1015,9 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, +@@ -1127,6 +1136,9 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, continue; } @@ -35,3 +53,6 @@ index 3ceba73..5162a3b 100644 if (sscanf(cpu_char, "%d", &physcpu) != 1) continue; +-- +2.32.0 (Apple Git-132) + diff --git a/0010-diskstats-support-devicemapper-device.patch b/0010-diskstats-support-devicemapper-device.patch index ddda7cd5437b59cf7525fe8f77e4445370980e18..cca224e0b16d45621eeb3d5ea299b32674359970 100644 --- a/0010-diskstats-support-devicemapper-device.patch +++ b/0010-diskstats-support-devicemapper-device.patch @@ -1,43 +1,52 @@ +From 784830ba0066dae7a181df2b82795dda57427127 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Tue, 30 Nov 2021 15:23:01 +0800 +Subject: [PATCH 10/18] diskstats-support-devicemapper-device + +--- + src/proc_fuse.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 55 insertions(+), 1 deletion(-) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 145e2e2..7442d4c 100644 +index c6c32c7..a613688 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -537,6 +537,15 @@ void free_devinfo_list(struct devinfo *ptr) +@@ -611,6 +611,15 @@ void free_devinfo_list(struct devinfo *ptr) } } +static bool need_record_diskstats(unsigned int major, unsigned int minor) +{ -+ // support device which major is 253 and 252 -+ if (major == 253 || major == 252) { -+ return true; -+ } -+ return false; ++ // support device which major is 253 and 252 ++ if (major == 253 || major == 252) { ++ return true; ++ } ++ return false; +} + - static int proc_diskstats_read(char *buf, size_t size, off_t offset, - struct fuse_file_info *fi) - { -@@ -562,6 +571,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + struct lxcfs_diskstats { + unsigned int major; /* 1 - major number */ + unsigned int minor; /* 2 - minor mumber */ +@@ -653,6 +662,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + size_t linelen = 0, total_len = 0; int i = 0; int ret; - char dev_name[72]; + char tmp_dev_name[72]; if (offset) { - int left; -@@ -629,6 +639,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + size_t left; +@@ -720,6 +730,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, while (getline(&line, &linelen, f) != -1) { ssize_t l; char lbuf[256]; + bool match = false; - memset(dev_name, 0, sizeof(dev_name)); - i = sscanf(line, "%u %u %71s", &major, &minor, dev_name); -@@ -638,9 +649,14 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, - if (major == ptr->major && minor == ptr->minor) { - snprintf(dev_name, sizeof(dev_name), "%s", ptr->name); - dev_name[71] = '\0'; + memset(stats.dev_name, 0, sizeof(stats.dev_name)); + i = sscanf(line, "%u %u %71s", &stats.major, &stats.minor, stats.dev_name); +@@ -729,9 +740,14 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + if (stats.major == ptr->major && stats.minor == ptr->minor) { + snprintf(stats.dev_name, sizeof(stats.dev_name), "%s", ptr->name); + stats.dev_name[71] = '\0'; + match = true; } } @@ -46,24 +55,57 @@ index 145e2e2..7442d4c 100644 + continue; + } + - get_blkio_io_value(io_serviced_str, major, minor, "Read", &read); - get_blkio_io_value(io_serviced_str, major, minor, "Write", &write); - get_blkio_io_value(io_merged_str, major, minor, "Read", &read_merged); -@@ -670,8 +686,16 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, - snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", - major, minor, dev_name, read, read_merged, read_sectors, read_ticks, - write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Read", &stats.read); + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Write", &stats.write); + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Discard", &stats.discard); +@@ -791,8 +807,46 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + stats.discard_merged, + stats.discard_sectors, + stats.discard_ticks); - else -+ else if (need_record_diskstats(major, minor)) { -+ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", -+ &major, &minor, tmp_dev_name, &read, &read_merged, &read_sectors, &read_ticks, -+ &write, &write_merged, &write_sectors, &write_ticks, &ios_pgr, &tot_ticks, &rq_ticks); -+ snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", -+ major, minor, dev_name, read, read_merged, read_sectors, read_ticks, -+ write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); -+ } else { ++ else if (need_record_diskstats(stats.major, stats.minor)) { ++ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", ++ &stats.major, ++ &stats.minor, ++ tmp_dev_name, ++ &stats.read, ++ &stats.read_merged, ++ &stats.read_sectors, ++ &stats.read_ticks, ++ &stats.write, ++ &stats.write_merged, ++ &stats.write_sectors, ++ &stats.write_ticks, ++ &stats.ios_pgr, ++ &stats.total_ticks, ++ &stats.rq_ticks, ++ &stats.discard_merged, ++ &stats.discard_sectors, ++ &stats.discard_ticks); ++ snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", ++ stats.major, ++ stats.minor, ++ stats.dev_name, ++ stats.read, ++ stats.read_merged, ++ stats.read_sectors, ++ stats.read_ticks, ++ stats.write, ++ stats.write_merged, ++ stats.write_sectors, ++ stats.write_ticks, ++ stats.ios_pgr, ++ stats.total_ticks, ++ stats.rq_ticks, ++ stats.discard_merged, ++ stats.discard_sectors, ++ stats.discard_ticks); ++ } else { continue; -+ } ++ } l = snprintf(cache, cache_size, "%s", lbuf); if (l < 0) { +-- +2.32.0 (Apple Git-132) + diff --git a/0011-lxcfs-add-proc-partitions.patch b/0011-lxcfs-add-proc-partitions.patch index 99e889f032d764014ddab250003e26a2e843fd55..545918a685319425056d3748cfd27377b444bddc 100644 --- a/0011-lxcfs-add-proc-partitions.patch +++ b/0011-lxcfs-add-proc-partitions.patch @@ -1,8 +1,18 @@ +From f4486dde281016cda897f1564dcb8ca0303f2fbf Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 16:01:12 +0800 +Subject: [PATCH 11/18] lxcfs-add-proc-partitions + +--- + src/bindings.h | 3 ++ + src/proc_fuse.c | 131 +++++++++++++++++++++++++++++++++++++++++++++--- + 2 files changed, 126 insertions(+), 8 deletions(-) + diff --git a/src/bindings.h b/src/bindings.h -index e260902..241b2fd 100644 +index cd7d466..91d44c7 100644 --- a/src/bindings.h +++ b/src/bindings.h -@@ -62,6 +62,9 @@ enum lxcfs_virt_t { +@@ -55,6 +55,9 @@ enum lxcfs_virt_t { LXC_TYPE_PROC_LOADAVG, #define LXC_TYPE_PROC_LOADAVG_PATH "/proc/loadavg" @@ -13,10 +23,10 @@ index e260902..241b2fd 100644 LXC_TYPE_SYS_DEVICES_SYSTEM, LXC_TYPE_SYS_DEVICES_SYSTEM_CPU, diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 7442d4c..4ceea4c 100644 +index a613688..72f6de6 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -109,13 +109,14 @@ __lxcfs_fuse_ops int proc_getattr(const char *path, struct stat *sb) +@@ -118,13 +118,14 @@ __lxcfs_fuse_ops int proc_getattr(const char *path, struct stat *sb) return 0; } @@ -34,21 +44,21 @@ index 7442d4c..4ceea4c 100644 + strcmp(path, "/proc/diskstats") == 0 || + strcmp(path, "/proc/swaps") == 0 || + strcmp(path, "/proc/loadavg") == 0 || -+ strcmp(path, "/proc/partitions") == 0) { - sb->st_size = 0; ++ strcmp(path, "/proc/partitions") == 0) { + sb->st_size = get_procfile_size(path); sb->st_mode = S_IFREG | 00444; sb->st_nlink = 1; -@@ -137,7 +138,8 @@ __lxcfs_fuse_ops int proc_readdir(const char *path, void *buf, - filler(buf, "uptime", NULL, 0) != 0 || - filler(buf, "diskstats", NULL, 0) != 0 || - filler(buf, "swaps", NULL, 0) != 0 || -- filler(buf, "loadavg", NULL, 0) != 0) -+ filler(buf, "loadavg", NULL, 0) != 0 || -+ filler(buf, "partitions", NULL, 0) != 0 ) +@@ -146,7 +147,8 @@ __lxcfs_fuse_ops int proc_readdir(const char *path, void *buf, + DIR_FILLER(filler, buf, "uptime", NULL, 0) != 0 || + DIR_FILLER(filler, buf, "diskstats", NULL, 0) != 0 || + DIR_FILLER(filler, buf, "swaps", NULL, 0) != 0 || +- DIR_FILLER(filler, buf, "loadavg", NULL, 0) != 0) ++ DIR_FILLER(filler, buf, "loadavg", NULL, 0) != 0 || ++ DIR_FILLER(filler, buf, "partitions", NULL, 0) != 0) return -EINVAL; return 0; -@@ -179,6 +181,8 @@ __lxcfs_fuse_ops int proc_open(const char *path, struct fuse_file_info *fi) +@@ -171,6 +173,8 @@ __lxcfs_fuse_ops int proc_open(const char *path, struct fuse_file_info *fi) type = LXC_TYPE_PROC_SWAPS; else if (strcmp(path, "/proc/loadavg") == 0) type = LXC_TYPE_PROC_LOADAVG; @@ -57,7 +67,7 @@ index 7442d4c..4ceea4c 100644 if (type == -1) return -ENOENT; -@@ -721,6 +725,110 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, +@@ -872,6 +876,111 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, return total_len; } @@ -157,6 +167,7 @@ index 7442d4c..4ceea4c 100644 + rv = total_len; +err: + free(cg); ++ cg = NULL; + if (f != NULL) + fclose(f); + free(line); @@ -165,10 +176,10 @@ index 7442d4c..4ceea4c 100644 + return rv; +} + - #if RELOADTEST + #ifdef RELOADTEST static inline void iwashere(void) { -@@ -1519,6 +1627,12 @@ __lxcfs_fuse_ops int proc_read(const char *path, char *buf, size_t size, +@@ -1676,6 +1785,12 @@ __lxcfs_fuse_ops int proc_read(const char *path, char *buf, size_t size, return read_file_fuse_with_offset(LXC_TYPE_PROC_LOADAVG_PATH, buf, size, offset, f); @@ -181,3 +192,6 @@ index 7442d4c..4ceea4c 100644 } return -EINVAL; +-- +2.32.0 (Apple Git-132) + diff --git a/0012-lxcfs-proc_diskstats_read-func-obtain-data-from-blki.patch b/0012-lxcfs-proc_diskstats_read-func-obtain-data-from-blki.patch index 53900ff63a3887eed3fbbebd76e4d92613835945..b00d682b094e76978a42b83049a16c385e50a52f 100644 --- a/0012-lxcfs-proc_diskstats_read-func-obtain-data-from-blki.patch +++ b/0012-lxcfs-proc_diskstats_read-func-obtain-data-from-blki.patch @@ -1,8 +1,17 @@ +From a0d132e43d22153908e392b8274570bacd9cb6ce Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 16:10:39 +0800 +Subject: [PATCH 12/18] lxcfs-proc_diskstats_read-func-obtain-data-from-blki + +--- + src/cgroups/cgfsng.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + diff --git a/src/cgroups/cgfsng.c b/src/cgroups/cgfsng.c -index ca80a75..5ec0352 100644 +index 781923c..e50c87d 100644 --- a/src/cgroups/cgfsng.c +++ b/src/cgroups/cgfsng.c -@@ -754,7 +754,11 @@ static int cgfsng_get_io(struct cgroup_ops *ops, const char *cgroup, +@@ -751,7 +751,11 @@ static int cgfsng_get_io(struct cgroup_ops *ops, const char *cgroup, static int cgfsng_get_io_service_bytes(struct cgroup_ops *ops, const char *cgroup, char **value) { @@ -15,7 +24,7 @@ index ca80a75..5ec0352 100644 } static int cgfsng_get_io_service_time(struct cgroup_ops *ops, -@@ -766,7 +770,11 @@ static int cgfsng_get_io_service_time(struct cgroup_ops *ops, +@@ -763,7 +767,11 @@ static int cgfsng_get_io_service_time(struct cgroup_ops *ops, static int cgfsng_get_io_serviced(struct cgroup_ops *ops, const char *cgroup, char **value) { @@ -28,3 +37,6 @@ index ca80a75..5ec0352 100644 } static int cgfsng_get_io_merged(struct cgroup_ops *ops, const char *cgroup, +-- +2.32.0 (Apple Git-132) + diff --git a/0013-add-secure-compile-option-in-Makefile.patch b/0013-add-secure-compile-option-in-Makefile.patch index b635ec21904809acaa331074a538b3ae11225faa..a4d2397e8650d6f9e5f388d07a3e595f8b27ea35 100644 --- a/0013-add-secure-compile-option-in-Makefile.patch +++ b/0013-add-secure-compile-option-in-Makefile.patch @@ -1,5 +1,14 @@ +From cc7fb353c259830179c7371afb7b141c0f8290ae Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 16:48:55 +0800 +Subject: [PATCH 13/18] add-secure-compile-option-in-Makefile + +--- + src/Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + diff --git a/src/Makefile.am b/src/Makefile.am -index 030d6b5..96d884e 100644 +index 2734334..437a377 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,6 +6,8 @@ AM_LDFLAGS = $(FUSE_LIBS) -pthread @@ -11,3 +20,6 @@ index 030d6b5..96d884e 100644 liblxcfs_la_SOURCES = api_extensions.h \ bindings.c bindings.h \ +-- +2.32.0 (Apple Git-132) + diff --git a/0014-fix-proc-diskstats-show-in-container.patch b/0014-fix-proc-diskstats-show-in-container.patch index 34161265c2b921da501a6fa257f05f49639c4ebc..37edf4e4f8035f59921a0dd22e93fe01ae11c787 100644 --- a/0014-fix-proc-diskstats-show-in-container.patch +++ b/0014-fix-proc-diskstats-show-in-container.patch @@ -1,23 +1,128 @@ +From 6710b6d777e4e25b1ce78a4cb9736e7e65f15aa2 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Tue, 30 Nov 2021 15:26:26 +0800 +Subject: [PATCH 14/18] fix-proc-diskstats-show-in-container + +--- + src/proc_fuse.c | 98 +++++++++++++++++++++++++++++-------------------- + 1 file changed, 59 insertions(+), 39 deletions(-) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 4ceea4c..519cda4 100644 +index 72f6de6..0d5ba89 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -686,11 +686,16 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, - tot_ticks = tot_ticks/1000000; +@@ -792,7 +792,64 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + if (stats.read || stats.write || stats.read_merged || stats.write_merged || + stats.read_sectors || stats.write_sectors || stats.read_ticks || + stats.write_ticks || stats.ios_pgr || stats.total_ticks || stats.rq_ticks || +- stats.discard_merged || stats.discard_sectors || stats.discard_ticks) ++ stats.discard_merged || stats.discard_sectors || stats.discard_ticks) { ++ if (need_record_diskstats(stats.major, stats.minor)) { ++ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", ++ &stats.major, ++ &stats.minor, ++ tmp_dev_name, ++ &stats.read, ++ &stats.read_merged, ++ &stats.read_sectors, ++ &stats.read_ticks, ++ &stats.write, ++ &stats.write_merged, ++ &stats.write_sectors, ++ &stats.write_ticks, ++ &stats.ios_pgr, ++ &stats.total_ticks, ++ &stats.rq_ticks, ++ &stats.discard_merged, ++ &stats.discard_sectors, ++ &stats.discard_ticks); ++ } ++ snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", ++ stats.major, ++ stats.minor, ++ stats.dev_name, ++ stats.read, ++ stats.read_merged, ++ stats.read_sectors, ++ stats.read_ticks, ++ stats.write, ++ stats.write_merged, ++ stats.write_sectors, ++ stats.write_ticks, ++ stats.ios_pgr, ++ stats.total_ticks, ++ stats.rq_ticks, ++ stats.discard_merged, ++ stats.discard_sectors, ++ stats.discard_ticks); ++ } else if (need_record_diskstats(stats.major, stats.minor)) { ++ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", ++ &stats.major, ++ &stats.minor, ++ tmp_dev_name, ++ &stats.read, ++ &stats.read_merged, ++ &stats.read_sectors, ++ &stats.read_ticks, ++ &stats.write, ++ &stats.write_merged, ++ &stats.write_sectors, ++ &stats.write_ticks, ++ &stats.ios_pgr, ++ &stats.total_ticks, ++ &stats.rq_ticks, ++ &stats.discard_merged, ++ &stats.discard_sectors, ++ &stats.discard_ticks); + snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", + stats.major, + stats.minor, +@@ -811,44 +868,7 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + stats.discard_merged, + stats.discard_sectors, + stats.discard_ticks); +- else if (need_record_diskstats(stats.major, stats.minor)) { +- sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", +- &stats.major, +- &stats.minor, +- tmp_dev_name, +- &stats.read, +- &stats.read_merged, +- &stats.read_sectors, +- &stats.read_ticks, +- &stats.write, +- &stats.write_merged, +- &stats.write_sectors, +- &stats.write_ticks, +- &stats.ios_pgr, +- &stats.total_ticks, +- &stats.rq_ticks, +- &stats.discard_merged, +- &stats.discard_sectors, +- &stats.discard_ticks); +- snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", +- stats.major, +- stats.minor, +- stats.dev_name, +- stats.read, +- stats.read_merged, +- stats.read_sectors, +- stats.read_ticks, +- stats.write, +- stats.write_merged, +- stats.write_sectors, +- stats.write_ticks, +- stats.ios_pgr, +- stats.total_ticks, +- stats.rq_ticks, +- stats.discard_merged, +- stats.discard_sectors, +- stats.discard_ticks); +- } else { ++ } else { + continue; + } + +-- +2.32.0 (Apple Git-132) - memset(lbuf, 0, 256); -- if (read || write || read_merged || write_merged || read_sectors || write_sectors || read_ticks || write_ticks) -+ if (read || write || read_merged || write_merged || read_sectors || write_sectors || read_ticks || write_ticks) { -+ if (need_record_diskstats(major, minor)) { -+ sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", -+ &major, &minor, tmp_dev_name, &read, &read_merged, &read_sectors, &read_ticks, -+ &write, &write_merged, &write_sectors, &write_ticks, &ios_pgr, &tot_ticks, &rq_ticks); -+ } - snprintf(lbuf, 256, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", - major, minor, dev_name, read, read_merged, read_sectors, read_ticks, - write, write_merged, write_sectors, write_ticks, ios_pgr, tot_ticks, rq_ticks); -- else if (need_record_diskstats(major, minor)) { -+ } else if (need_record_diskstats(major, minor)) { - sscanf(line, "%u %u %71s %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n", - &major, &minor, tmp_dev_name, &read, &read_merged, &read_sectors, &read_ticks, - &write, &write_merged, &write_sectors, &write_ticks, &ios_pgr, &tot_ticks, &rq_ticks); diff --git a/0015-lxcfs-adapt-4.18-kernel.patch b/0015-lxcfs-adapt-4.18-kernel.patch index 726a906ea27101271c39c82a589ad15c77c6891c..2103ae1829a4ddd39accd5146be22985acc57ac9 100644 --- a/0015-lxcfs-adapt-4.18-kernel.patch +++ b/0015-lxcfs-adapt-4.18-kernel.patch @@ -1,23 +1,43 @@ +From 7418289cfc1e14dc4aa71fd473a083a75fda75a7 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 20:21:46 +0800 +Subject: [PATCH 15/18] lxcfs-adapt-4.18-kernel + +--- + src/proc_fuse.c | 69 +++++++++++++++++++++---------------------------- + 1 file changed, 30 insertions(+), 39 deletions(-) + diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 519cda4..96eb9d7 100644 +index 0d5ba89..a72d6a2 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -608,11 +608,6 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, - return read_file_fuse("/proc/diskstats", buf, size, d); - } - +@@ -659,8 +659,8 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + struct devinfo *container_devinfo = NULL, *ptr = NULL; + struct lxcfs_diskstats stats = {}; + /* helper fields */ +- uint64_t read_service_time, write_service_time, discard_service_time, read_wait_time, +- write_wait_time, discard_wait_time; ++ uint64_t read_service_time = 0, write_service_time = 0, discard_service_time = 0, read_wait_time = 0, ++ write_wait_time = 0, discard_wait_time = 0, total_ticks = 0; + char *cache = d->buf; + size_t cache_size = d->buflen; + size_t linelen = 0, total_len = 0; +@@ -699,29 +699,15 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + return read_file_fuse("/proc/diskstats", buf, size, d); + } + - ret = cgroup_ops->get_io_merged(cgroup_ops, cg, &io_merged_str); - if (ret < 0) { - if (ret == -EOPNOTSUPP) - return read_file_fuse("/proc/diskstats", buf, size, d); - } - - ret = cgroup_ops->get_io_service_bytes(cgroup_ops, cg, &io_service_bytes_str); - if (ret < 0) { -@@ -620,17 +615,9 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, - return read_file_fuse("/proc/diskstats", buf, size, d); - } - +- + ret = cgroup_ops->get_io_service_bytes(cgroup_ops, cg, &io_service_bytes_str); + if (ret < 0) { + if (ret == -EOPNOTSUPP) + return read_file_fuse("/proc/diskstats", buf, size, d); + } + - ret = cgroup_ops->get_io_wait_time(cgroup_ops, cg, &io_wait_time_str); - if (ret < 0) { - if (ret == -EOPNOTSUPP) @@ -32,52 +52,71 @@ index 519cda4..96eb9d7 100644 + cgroup_ops->get_io_merged(cgroup_ops, cg, &io_merged_str); + cgroup_ops->get_io_wait_time(cgroup_ops, cg, &io_wait_time_str); + cgroup_ops->get_io_service_time(cgroup_ops, cg, &io_service_time_str); - - f = fopen_cached("/proc/diskstats", "re", &fopen_cache); - if (!f) -@@ -663,26 +650,32 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, - - get_blkio_io_value(io_serviced_str, major, minor, "Read", &read); - get_blkio_io_value(io_serviced_str, major, minor, "Write", &write); -- get_blkio_io_value(io_merged_str, major, minor, "Read", &read_merged); -- get_blkio_io_value(io_merged_str, major, minor, "Write", &write_merged); + + f = fopen_cached("/proc/diskstats", "re", &fopen_cache); + if (!f) +@@ -756,9 +742,11 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Write", &stats.write); + get_blkio_io_value(io_serviced_str, stats.major, stats.minor, "Discard", &stats.discard); + +- get_blkio_io_value(io_merged_str, stats.major, stats.minor, "Read", &stats.read_merged); +- get_blkio_io_value(io_merged_str, stats.major, stats.minor, "Write", &stats.write_merged); +- get_blkio_io_value(io_merged_str, stats.major, stats.minor, "Discard", &stats.discard_merged); + if (io_merged_str != NULL) { -+ get_blkio_io_value(io_merged_str, major, minor, "Read", &read_merged); -+ get_blkio_io_value(io_merged_str, major, minor, "Write", &write_merged); ++ get_blkio_io_value(io_merged_str, stats.major, stats.minor, "Read", &stats.read_merged); ++ get_blkio_io_value(io_merged_str, stats.major, stats.minor, "Write", &stats.write_merged); ++ get_blkio_io_value(io_merged_str, stats.major, stats.minor, "Discard", &stats.discard_merged); + } - get_blkio_io_value(io_service_bytes_str, major, minor, "Read", &read_sectors); - read_sectors = read_sectors/512; - get_blkio_io_value(io_service_bytes_str, major, minor, "Write", &write_sectors); - write_sectors = write_sectors/512; - -- get_blkio_io_value(io_service_time_str, major, minor, "Read", &rd_svctm); -- rd_svctm = rd_svctm/1000000; -- get_blkio_io_value(io_wait_time_str, major, minor, "Read", &rd_wait); -- rd_wait = rd_wait/1000000; -- read_ticks = rd_svctm + rd_wait; + + get_blkio_io_value(io_service_bytes_str, stats.major, stats.minor, "Read", &stats.read_sectors); + stats.read_sectors = stats.read_sectors / 512; +@@ -767,26 +755,29 @@ static int proc_diskstats_read(char *buf, size_t size, off_t offset, + get_blkio_io_value(io_service_bytes_str, stats.major, stats.minor, "Discard", &stats.discard_sectors); + stats.discard_sectors = stats.discard_sectors / 512; + +- get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Read", &read_service_time); +- read_service_time = read_service_time / 1000000; +- get_blkio_io_value(io_wait_time_str, stats.major, stats.minor, "Read", &read_wait_time); +- read_wait_time = read_wait_time / 1000000; +- stats.read_ticks = read_service_time + read_wait_time; + if (io_service_time_str != NULL) { -+ get_blkio_io_value(io_service_time_str, major, minor, "Read", &rd_svctm); -+ rd_svctm = rd_svctm/1000000; -+ get_blkio_io_value(io_service_time_str, major, minor, "Write", &wr_svctm); -+ wr_svctm = wr_svctm/1000000; -+ get_blkio_io_value(io_service_time_str, major, minor, "Total", &tot_ticks); ++ get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Read", &read_service_time); ++ read_service_time = read_service_time / 1000000; ++ get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Write", &write_service_time); ++ write_service_time = write_service_time / 1000000; ++ get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Discard", &discard_service_time); ++ discard_service_time = discard_service_time / 1000000; ++ get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Total", &total_ticks); + } - -- get_blkio_io_value(io_service_time_str, major, minor, "Write", &wr_svctm); -- wr_svctm = wr_svctm/1000000; -- get_blkio_io_value(io_wait_time_str, major, minor, "Write", &wr_wait); -- wr_wait = wr_wait/1000000; -- write_ticks = wr_svctm + wr_wait; + +- get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Write", &write_service_time); +- write_service_time = write_service_time / 1000000; +- get_blkio_io_value(io_wait_time_str, stats.major, stats.minor, "Write", &write_wait_time); +- write_wait_time = write_wait_time / 1000000; +- stats.write_ticks = write_service_time + write_wait_time; + if (io_wait_time_str != NULL) { -+ get_blkio_io_value(io_wait_time_str, major, minor, "Read", &rd_wait); -+ rd_wait = rd_wait/1000000; -+ get_blkio_io_value(io_wait_time_str, major, minor, "Write", &wr_wait); -+ wr_wait = wr_wait/1000000; ++ get_blkio_io_value(io_wait_time_str, stats.major, stats.minor, "Read", &read_wait_time); ++ read_wait_time = read_wait_time / 1000000; ++ get_blkio_io_value(io_wait_time_str, stats.major, stats.minor, "Write", &write_wait_time); ++ write_wait_time = write_wait_time / 1000000; ++ get_blkio_io_value(io_wait_time_str, stats.major, stats.minor, "Discard", &discard_wait_time); ++ discard_wait_time = discard_wait_time / 1000000; + } + +- get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Discard", &discard_service_time); +- discard_service_time = discard_service_time / 1000000; +- get_blkio_io_value(io_wait_time_str, stats.major, stats.minor, "Discard", &discard_wait_time); +- discard_wait_time = discard_wait_time / 1000000; ++ stats.read_ticks = read_service_time + read_wait_time; ++ stats.write_ticks = write_service_time + write_wait_time; + stats.discard_ticks = discard_service_time + discard_wait_time; +- +- get_blkio_io_value(io_service_time_str, stats.major, stats.minor, "Total", &stats.total_ticks); +- stats.total_ticks = stats.total_ticks / 1000000; ++ stats.total_ticks = total_ticks / 1000000; + + memset(lbuf, 0, 256); + if (stats.read || stats.write || stats.read_merged || stats.write_merged || +-- +2.32.0 (Apple Git-132) -- get_blkio_io_value(io_service_time_str, major, minor, "Total", &tot_ticks); -+ read_ticks = rd_svctm + rd_wait; -+ write_ticks = wr_svctm + wr_wait; - tot_ticks = tot_ticks/1000000; - - memset(lbuf, 0, 256); diff --git a/0016-remove-lxcfs-tools-dependency-for-common-use.patch b/0016-remove-lxcfs-tools-dependency-for-common-use.patch index bda3d95aa9c1f6c1b9bf7b3abbff79c78d200c23..61e37705ed0cc5a44d33ffacb7df808e10fbcf2b 100644 --- a/0016-remove-lxcfs-tools-dependency-for-common-use.patch +++ b/0016-remove-lxcfs-tools-dependency-for-common-use.patch @@ -1,9 +1,8 @@ -From 93a91769aaece5bcdac817443e31cd0a15a0952a Mon Sep 17 00:00:00 2001 -From: zhangsong234 -Date: Tue, 30 Mar 2021 15:14:24 +0800 -Subject: [PATCH] remove lxcfs-tools dependency for common use +From 035571472fa6c5772cc6ac467cad7f8ffb9e1d8e Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 20:26:45 +0800 +Subject: [PATCH 16/18] remove-lxcfs-tools-dependency-for-common-use -Signed-off-by: zhangsong234 --- config/init/systemd/lxcfs.service.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) @@ -28,5 +27,5 @@ index 3d763c6..bdaa2fa 100644 Delegate=yes ExecReload=/bin/kill -USR1 $MAINPID -- -1.8.3.1 +2.32.0 (Apple Git-132) diff --git a/0017-proc_fuse-fix-wait-child-process-hang.patch b/0017-proc_fuse-fix-wait-child-process-hang.patch index c55b766d0ddec9f05b679190952d782c9889427c..699efdf12d0252b31b46b36e1e10a28e9d05bd56 100644 --- a/0017-proc_fuse-fix-wait-child-process-hang.patch +++ b/0017-proc_fuse-fix-wait-child-process-hang.patch @@ -1,18 +1,17 @@ -From aa362b383ca5e79e03fd350867fb4f96a1335ae5 Mon Sep 17 00:00:00 2001 -From: zhangsong234 -Date: Thu, 27 May 2021 10:16:00 +0800 -Subject: [PATCH] proc_fuse: fix wait child process hang +From cde83aa89f9ee972e2cf087c907520b66b0fd4f9 Mon Sep 17 00:00:00 2001 +From: yangjiaqi +Date: Thu, 25 Nov 2021 20:30:09 +0800 +Subject: [PATCH 17/18] proc_fuse-fix-wait-child-process-hang -Signed-off-by: zhangsong234 --- src/proc_fuse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/proc_fuse.c b/src/proc_fuse.c -index 96eb9d7..82b32c1 100644 +index a72d6a2..d02f841 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c -@@ -487,11 +487,11 @@ struct devinfo* container_dev_read(pid_t pid) { +@@ -561,11 +561,11 @@ struct devinfo* container_dev_read(pid_t pid) { dev_num = dev_stat.st_dev & (~0xf); fprintf(stream, "sda %d end 0 ", dev_num); fflush(stream); @@ -26,5 +25,5 @@ index 96eb9d7..82b32c1 100644 stream = fdopen(mypipe[0], "r"); if (stream == NULL) { -- -2.27.0 +2.32.0 (Apple Git-132) diff --git a/lxcfs-4.0.11.tar.gz b/lxcfs-4.0.11.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..455b1b4bd453051c4003cce618bff9d49717172e Binary files /dev/null and b/lxcfs-4.0.11.tar.gz differ diff --git a/lxcfs-4.0.5.tar.gz b/lxcfs-4.0.5.tar.gz deleted file mode 100644 index cfaedd79d03c01c1caddf652f38b351a007aabda..0000000000000000000000000000000000000000 Binary files a/lxcfs-4.0.5.tar.gz and /dev/null differ diff --git a/lxcfs.spec b/lxcfs.spec index 10c901e32a6652838ca47e0962cfaf1eecd9d6fd..4580571a0021fb638dc9c92bdf3297295cfa2d50 100644 --- a/lxcfs.spec +++ b/lxcfs.spec @@ -3,8 +3,8 @@ #Basic Information Name: lxcfs -Version: 4.0.5 -Release: 6 +Version: 4.0.11 +Release: 1 Summary: FUSE filesystem for LXC License: LGPL 2.1+ URL: http://linuxcontainers.org @@ -32,6 +32,7 @@ Patch9017: 0017-proc_fuse-fix-wait-child-process-hang.patch BuildRequires: autoconf automake libtool help2man BuildRequires: fuse-devel libattr-devel BuildRequires: gcc systemd-units +Requires: fuse-libs %description lxcfs is a simple userspace filesystem designed to make containers @@ -87,6 +88,9 @@ fi %{_unitdir}/* %changelog +* Sat Nov 27 2021 yangjiaqi - 4.0.11-1 +- update to 4.0.11 + * Mon Jun 28 2021 zhangsong234 - 4.0.5-6 - fix rpm build failed @@ -102,7 +106,7 @@ fi * Fri Aug 28 2020 openEuler Buildteam - 4.0.5-1 - update to 4.0.5 -* Thu July 02 2020 openEuler Buildteam - 3.0.2-0.12 +* Thu Jul 02 2020 openEuler Buildteam - 3.0.2-0.12 - Sync from internal changes * Thu Dec 26 2019 openEuler Buildteam - 3.0.2-0.5.h2