[linux-tools] 07/13: [x86] hyperv-daemons: Apply upstream bug fixes up to Linux 4.1 inclusive
debian-kernel at lists.debian.org
debian-kernel at lists.debian.org
Thu Nov 5 22:56:29 UTC 2015
This is an automated email from the git hooks/post-receive script.
benh pushed a commit to branch jessie
in repository linux-tools.
commit 7db5d244981aed52d67fb5474bdaad2b23b07365
Author: Ben Hutchings <ben at decadent.org.uk>
Date: Wed Nov 4 15:39:33 2015 +0000
[x86] hyperv-daemons: Apply upstream bug fixes up to Linux 4.1 inclusive
---
debian/changelog | 1 +
...v-fix-file-overwriting-of-hv_fcopy_daemon.patch | 30 +++
...sdaemon-ignore-the-EBUSY-on-multiple-free.patch | 123 +++++++++++++
...003-tools-hv-introduce-n-no-daemon-option.patch | 202 +++++++++++++++++++++
...4-Tools-hv-vssdaemon-report-freeze-errors.patch | 70 +++++++
...sdaemon-skip-all-filesystems-mounted-read.patch | 30 +++
...nore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch | 58 ++++++
...-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch | 30 +++
...-kvp_daemon-make-IPv6-only-injection-work.patch | 52 ++++++
...move-unused-bytes_written-from-kvp_update.patch | 41 +++++
...dress-compiler-warnings-for-hv_kvp_daemon.patch | 116 ++++++++++++
...dress-compiler-warnings-for-hv_fcopy_daem.patch | 39 ++++
...hv-do-not-add-redundant-in-hv_start_fcopy.patch | 32 ++++
...opy_daemon-support-2GB-files-for-x86_32-g.patch | 33 ++++
...sd-call-endmntent-before-call-setmntent-a.patch | 58 ++++++
debian/patches/series | 14 ++
16 files changed, 929 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index a2c799e..8a34583 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
linux-tools (3.16-4) UNRELEASED; urgency=medium
* [x86] Add hyperv-daemons package, thanks to Hideki Yamane (closes: #782761)
+ - Apply upstream bug fixes up to Linux 4.1 inclusive
-- Ben Hutchings <ben at decadent.org.uk> Wed, 04 Nov 2015 12:49:40 +0000
diff --git a/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch b/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch
new file mode 100644
index 0000000..c9c8024
--- /dev/null
+++ b/debian/patches/0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch
@@ -0,0 +1,30 @@
+From: Yue Zhang <yuezha at microsoft.com>
+Date: Fri, 27 Jun 2014 18:19:48 -0700
+Subject: [01/14] Tools: hv: fix file overwriting of hv_fcopy_daemon
+Origin: https://git.kernel.org/linus/e013ac312c79379b26cf29012cfbb37c68f79283
+
+hv_fcopy_daemon fails to overwrite a file if the target file already
+exits.
+
+Add O_TRUNC flag on opening.
+
+Signed-off-by: Yue Zhang <yuezha at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index fba1c75..8f96b3e 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -88,7 +88,8 @@ static int hv_start_fcopy(struct hv_start_fcopy *smsg)
+ }
+ }
+
+- target_fd = open(target_fname, O_RDWR | O_CREAT | O_CLOEXEC, 0744);
++ target_fd = open(target_fname,
++ O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC, 0744);
+ if (target_fd == -1) {
+ syslog(LOG_INFO, "Open Failed: %s", strerror(errno));
+ goto done;
diff --git a/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch b/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch
new file mode 100644
index 0000000..968f78b
--- /dev/null
+++ b/debian/patches/0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch
@@ -0,0 +1,123 @@
+From: Dexuan Cui <decui at microsoft.com>
+Date: Thu, 25 Sep 2014 21:52:04 -0700
+Subject: [02/14] Tools: hv: vssdaemon: ignore the EBUSY on multiple freezing
+ the same partition
+Origin: https://git.kernel.org/linus/4f689190bb55d171d2f6614f8a6cbd4b868e48bd
+
+If a partition appears mounted more than once in /proc/mounts, vss_do_freeze()
+succeeds only for the first time and gets EBUSY (on freeze) or EINVAL (on
+thaw) for the second time. The patch ignores these to make the backup feature
+work.
+
+Also improved the error handling in case a freeze operation fails.
+
+Signed-off-by: Dexuan Cui <decui at microsoft.com>
+Reviewed-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 48 ++++++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 40 insertions(+), 8 deletions(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index 6a213b8..1db9430 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -44,21 +44,39 @@ static struct sockaddr_nl addr;
+ #endif
+
+
+-static int vss_do_freeze(char *dir, unsigned int cmd, char *fs_op)
++/* Don't use syslog() in the function since that can cause write to disk */
++static int vss_do_freeze(char *dir, unsigned int cmd)
+ {
+ int ret, fd = open(dir, O_RDONLY);
+
+ if (fd < 0)
+ return 1;
++
+ ret = ioctl(fd, cmd, 0);
+- syslog(LOG_INFO, "VSS: %s of %s: %s\n", fs_op, dir, strerror(errno));
++
++ /*
++ * If a partition is mounted more than once, only the first
++ * FREEZE/THAW can succeed and the later ones will get
++ * EBUSY/EINVAL respectively: there could be 2 cases:
++ * 1) a user may mount the same partition to differnt directories
++ * by mistake or on purpose;
++ * 2) The subvolume of btrfs appears to have the same partition
++ * mounted more than once.
++ */
++ if (ret) {
++ if ((cmd == FIFREEZE && errno == EBUSY) ||
++ (cmd == FITHAW && errno == EINVAL)) {
++ close(fd);
++ return 0;
++ }
++ }
++
+ close(fd);
+ return !!ret;
+ }
+
+ static int vss_operate(int operation)
+ {
+- char *fs_op;
+ char match[] = "/dev/";
+ FILE *mounts;
+ struct mntent *ent;
+@@ -68,11 +86,9 @@ static int vss_operate(int operation)
+ switch (operation) {
+ case VSS_OP_FREEZE:
+ cmd = FIFREEZE;
+- fs_op = "freeze";
+ break;
+ case VSS_OP_THAW:
+ cmd = FITHAW;
+- fs_op = "thaw";
+ break;
+ default:
+ return -1;
+@@ -93,15 +109,23 @@ static int vss_operate(int operation)
+ root_seen = 1;
+ continue;
+ }
+- error |= vss_do_freeze(ent->mnt_dir, cmd, fs_op);
++ error |= vss_do_freeze(ent->mnt_dir, cmd);
++ if (error && operation == VSS_OP_FREEZE)
++ goto err;
+ }
+ endmntent(mounts);
+
+ if (root_seen) {
+- error |= vss_do_freeze("/", cmd, fs_op);
++ error |= vss_do_freeze("/", cmd);
++ if (error && operation == VSS_OP_FREEZE)
++ goto err;
+ }
+
+ return error;
++err:
++ endmntent(mounts);
++ vss_operate(VSS_OP_THAW);
++ return error;
+ }
+
+ static int netlink_send(int fd, struct cn_msg *msg)
+@@ -249,8 +273,16 @@ int main(void)
+ case VSS_OP_FREEZE:
+ case VSS_OP_THAW:
+ error = vss_operate(op);
+- if (error)
++ syslog(LOG_INFO, "VSS: op=%s: %s\n",
++ op == VSS_OP_FREEZE ? "FREEZE" : "THAW",
++ error ? "failed" : "succeeded");
++
++ if (error) {
+ error = HV_E_FAIL;
++ syslog(LOG_ERR, "op=%d failed!", op);
++ syslog(LOG_ERR, "report it with these files:");
++ syslog(LOG_ERR, "/etc/fstab and /proc/mounts");
++ }
+ break;
+ default:
+ syslog(LOG_ERR, "Illegal op:%d\n", op);
diff --git a/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch b/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch
new file mode 100644
index 0000000..0321a55
--- /dev/null
+++ b/debian/patches/0003-tools-hv-introduce-n-no-daemon-option.patch
@@ -0,0 +1,202 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Wed, 22 Oct 2014 18:07:11 +0200
+Subject: [03/14] tools: hv: introduce -n/--no-daemon option
+Origin: https://git.kernel.org/linus/170f4bea2008054e5098f99359e29823a7b4b1b9
+
+All tools/hv daemons do mandatory daemon() on startup. However, no pidfile
+is created, this make it difficult for an init system to track such daemons.
+Modern linux distros use systemd as their init system. It can handle the
+daemonizing by itself, however, it requires a daemon to stay in foreground
+for that. Some distros already carry distro-specific patch for hv tools
+which switches off daemon().
+
+Introduce -n/--no-daemon option for all 3 daemons in hv/tools. Parse options
+with getopt() to make this part easily expandable.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 33 +++++++++++++++++++++++++++++++--
+ tools/hv/hv_kvp_daemon.c | 34 ++++++++++++++++++++++++++++++++--
+ tools/hv/hv_vss_daemon.c | 33 +++++++++++++++++++++++++++++++--
+ 3 files changed, 94 insertions(+), 6 deletions(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index 8f96b3e..f437d73 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -33,6 +33,7 @@
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ #include <dirent.h>
++#include <getopt.h>
+
+ static int target_fd;
+ static char target_fname[W_MAX_PATH];
+@@ -126,15 +127,43 @@ static int hv_copy_cancel(void)
+
+ }
+
+-int main(void)
++void print_usage(char *argv[])
++{
++ fprintf(stderr, "Usage: %s [options]\n"
++ "Options are:\n"
++ " -n, --no-daemon stay in foreground, don't daemonize\n"
++ " -h, --help print this help\n", argv[0]);
++}
++
++int main(int argc, char *argv[])
+ {
+ int fd, fcopy_fd, len;
+ int error;
++ int daemonize = 1, long_index = 0, opt;
+ int version = FCOPY_CURRENT_VERSION;
+ char *buffer[4096 * 2];
+ struct hv_fcopy_hdr *in_msg;
+
+- if (daemon(1, 0)) {
++ static struct option long_options[] = {
++ {"help", no_argument, 0, 'h' },
++ {"no-daemon", no_argument, 0, 'n' },
++ {0, 0, 0, 0 }
++ };
++
++ while ((opt = getopt_long(argc, argv, "hn", long_options,
++ &long_index)) != -1) {
++ switch (opt) {
++ case 'n':
++ daemonize = 0;
++ break;
++ case 'h':
++ default:
++ print_usage(argv);
++ exit(EXIT_FAILURE);
++ }
++ }
++
++ if (daemonize && daemon(1, 0)) {
+ syslog(LOG_ERR, "daemon() failed; error: %s", strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 4088b81..22b0764 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -43,6 +43,7 @@
+ #include <fcntl.h>
+ #include <dirent.h>
+ #include <net/if.h>
++#include <getopt.h>
+
+ /*
+ * KVP protocol: The user mode component first registers with the
+@@ -1417,7 +1418,15 @@ netlink_send(int fd, struct cn_msg *msg)
+ return sendmsg(fd, &message, 0);
+ }
+
+-int main(void)
++void print_usage(char *argv[])
++{
++ fprintf(stderr, "Usage: %s [options]\n"
++ "Options are:\n"
++ " -n, --no-daemon stay in foreground, don't daemonize\n"
++ " -h, --help print this help\n", argv[0]);
++}
++
++int main(int argc, char *argv[])
+ {
+ int fd, len, nl_group;
+ int error;
+@@ -1435,9 +1444,30 @@ int main(void)
+ struct hv_kvp_ipaddr_value *kvp_ip_val;
+ char *kvp_recv_buffer;
+ size_t kvp_recv_buffer_len;
++ int daemonize = 1, long_index = 0, opt;
++
++ static struct option long_options[] = {
++ {"help", no_argument, 0, 'h' },
++ {"no-daemon", no_argument, 0, 'n' },
++ {0, 0, 0, 0 }
++ };
++
++ while ((opt = getopt_long(argc, argv, "hn", long_options,
++ &long_index)) != -1) {
++ switch (opt) {
++ case 'n':
++ daemonize = 0;
++ break;
++ case 'h':
++ default:
++ print_usage(argv);
++ exit(EXIT_FAILURE);
++ }
++ }
+
+- if (daemon(1, 0))
++ if (daemonize && daemon(1, 0))
+ return 1;
++
+ openlog("KVP", 0, LOG_USER);
+ syslog(LOG_INFO, "KVP starting; pid is:%d", getpid());
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index 1db9430..b720d8f 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -36,6 +36,7 @@
+ #include <linux/hyperv.h>
+ #include <linux/netlink.h>
+ #include <syslog.h>
++#include <getopt.h>
+
+ static struct sockaddr_nl addr;
+
+@@ -155,7 +156,15 @@ static int netlink_send(int fd, struct cn_msg *msg)
+ return sendmsg(fd, &message, 0);
+ }
+
+-int main(void)
++void print_usage(char *argv[])
++{
++ fprintf(stderr, "Usage: %s [options]\n"
++ "Options are:\n"
++ " -n, --no-daemon stay in foreground, don't daemonize\n"
++ " -h, --help print this help\n", argv[0]);
++}
++
++int main(int argc, char *argv[])
+ {
+ int fd, len, nl_group;
+ int error;
+@@ -167,8 +176,28 @@ int main(void)
+ struct hv_vss_msg *vss_msg;
+ char *vss_recv_buffer;
+ size_t vss_recv_buffer_len;
++ int daemonize = 1, long_index = 0, opt;
++
++ static struct option long_options[] = {
++ {"help", no_argument, 0, 'h' },
++ {"no-daemon", no_argument, 0, 'n' },
++ {0, 0, 0, 0 }
++ };
++
++ while ((opt = getopt_long(argc, argv, "hn", long_options,
++ &long_index)) != -1) {
++ switch (opt) {
++ case 'n':
++ daemonize = 0;
++ break;
++ case 'h':
++ default:
++ print_usage(argv);
++ exit(EXIT_FAILURE);
++ }
++ }
+
+- if (daemon(1, 0))
++ if (daemonize && daemon(1, 0))
+ return 1;
+
+ openlog("Hyper-V VSS", 0, LOG_USER);
diff --git a/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch b/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch
new file mode 100644
index 0000000..a9980db
--- /dev/null
+++ b/debian/patches/0004-Tools-hv-vssdaemon-report-freeze-errors.patch
@@ -0,0 +1,70 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Mon, 10 Nov 2014 17:37:01 +0100
+Subject: [04/14] Tools: hv: vssdaemon: report freeze errors
+Origin: https://git.kernel.org/linus/7a401744d517864f8f2f2afba589e58a71d03aa6
+
+When ioctl(fd, FIFREEZE, 0) results in an error we cannot report it
+to syslog instantly since that can cause write to a frozen disk.
+However, the name of the filesystem which caused the error and errno
+are valuable and we would like to get a nice human-readable message
+in the log. Save errno before calling vss_operate(VSS_OP_THAW) and
+report the error right after.
+
+Unfortunately, FITHAW errors cannot be reported the same way as we
+need to finish thawing all filesystems before calling syslog().
+
+We should also avoid calling endmntent() for the second time in
+case we encountered an error during freezing of '/' as it usually
+results in SEGSEGV.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Acked-by: Dexuan Cui <decui at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index b720d8f..ee44f0d 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -82,7 +82,7 @@ static int vss_operate(int operation)
+ FILE *mounts;
+ struct mntent *ent;
+ unsigned int cmd;
+- int error = 0, root_seen = 0;
++ int error = 0, root_seen = 0, save_errno = 0;
+
+ switch (operation) {
+ case VSS_OP_FREEZE:
+@@ -114,7 +114,6 @@ static int vss_operate(int operation)
+ if (error && operation == VSS_OP_FREEZE)
+ goto err;
+ }
+- endmntent(mounts);
+
+ if (root_seen) {
+ error |= vss_do_freeze("/", cmd);
+@@ -122,10 +121,19 @@ static int vss_operate(int operation)
+ goto err;
+ }
+
+- return error;
++ goto out;
+ err:
+- endmntent(mounts);
++ save_errno = errno;
+ vss_operate(VSS_OP_THAW);
++ /* Call syslog after we thaw all filesystems */
++ if (ent)
++ syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
++ ent->mnt_dir, save_errno, strerror(save_errno));
++ else
++ syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
++ strerror(save_errno));
++out:
++ endmntent(mounts);
+ return error;
+ }
+
diff --git a/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch b/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch
new file mode 100644
index 0000000..ba575fc
--- /dev/null
+++ b/debian/patches/0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch
@@ -0,0 +1,30 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Mon, 10 Nov 2014 17:37:02 +0100
+Subject: [05/14] Tools: hv: vssdaemon: skip all filesystems mounted readonly
+Origin: https://git.kernel.org/linus/9e5db05aae4657c7ade34ccc4b93f27ab647498e
+
+Instead of making a list of exceptions for readonly filesystems
+in addition to iso9660 we already have it is better to skip freeze
+operation for all readonly-mounted filesystems.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Acked-by: Dexuan Cui <decui at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index ee44f0d..5e63f70 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -102,7 +102,7 @@ static int vss_operate(int operation)
+ while ((ent = getmntent(mounts))) {
+ if (strncmp(ent->mnt_fsname, match, strlen(match)))
+ continue;
+- if (strcmp(ent->mnt_type, "iso9660") == 0)
++ if (hasmntopt(ent, MNTOPT_RO) != NULL)
+ continue;
+ if (strcmp(ent->mnt_type, "vfat") == 0)
+ continue;
diff --git a/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch b/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch
new file mode 100644
index 0000000..8a19fe4
--- /dev/null
+++ b/debian/patches/0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch
@@ -0,0 +1,58 @@
+From: Dexuan Cui <decui at microsoft.com>
+Date: Wed, 19 Nov 2014 21:51:22 -0800
+Subject: [06/14] tools: hv: ignore ENOBUFS and ENOMEM in the KVP daemon
+Origin: https://git.kernel.org/linus/4300f26492b2438c4c1930552dfe83cb09c0ab31
+
+Under high memory pressure and very high KVP R/W test pressure, the netlink
+recvfrom() may transiently return ENOBUFS to the daemon -- we found this
+during a 2-week stress test.
+
+We'd better not terminate the daemon on the failure, because a typical KVP
+user will re-try the R/W and hopefully it will succeed next time.
+
+We can also ignore the errors on sending.
+
+Cc: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Dexuan Cui <decui at microsoft.com>
+Reviewed-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 22b0764..6a6432a 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -1559,8 +1559,15 @@ int main(int argc, char *argv[])
+ addr_p, &addr_l);
+
+ if (len < 0) {
++ int saved_errno = errno;
+ syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
+ addr.nl_pid, errno, strerror(errno));
++
++ if (saved_errno == ENOBUFS) {
++ syslog(LOG_ERR, "receive error: ignored");
++ continue;
++ }
++
+ close(fd);
+ return -1;
+ }
+@@ -1763,8 +1770,15 @@ kvp_done:
+
+ len = netlink_send(fd, incoming_cn_msg);
+ if (len < 0) {
++ int saved_errno = errno;
+ syslog(LOG_ERR, "net_link send failed; error: %d %s", errno,
+ strerror(errno));
++
++ if (saved_errno == ENOMEM || saved_errno == ENOBUFS) {
++ syslog(LOG_ERR, "send error: ignored");
++ continue;
++ }
++
+ exit(EXIT_FAILURE);
+ }
+ }
diff --git a/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch b/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch
new file mode 100644
index 0000000..b1b80f0
--- /dev/null
+++ b/debian/patches/0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch
@@ -0,0 +1,30 @@
+From: Matej Muzila <mmuzila at gmail.com>
+Date: Sun, 28 Dec 2014 15:54:13 +0100
+Subject: [07/14] tools: hv: Makefile: Add hv_fcopy_daemon to Makefile
+Origin: https://git.kernel.org/linus/ca04455fba937eb2d85f437900cd1726166192e6
+
+hv_fcopy_daemon is not mentioned in Makefile so it must be built
+manually. Add hv_fcopy_daemon to Makefile.
+
+Signed-off-by: Matej Muzila <mmuzila at redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/hv/Makefile b/tools/hv/Makefile
+index bd22f78..99ffe61 100644
+--- a/tools/hv/Makefile
++++ b/tools/hv/Makefile
+@@ -5,9 +5,9 @@ PTHREAD_LIBS = -lpthread
+ WARNINGS = -Wall -Wextra
+ CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS)
+
+-all: hv_kvp_daemon hv_vss_daemon
++all: hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
+ %: %.c
+ $(CC) $(CFLAGS) -o $@ $^
+
+ clean:
+- $(RM) hv_kvp_daemon hv_vss_daemon
++ $(RM) hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
diff --git a/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch b/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch
new file mode 100644
index 0000000..8d17eea
--- /dev/null
+++ b/debian/patches/0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch
@@ -0,0 +1,52 @@
+From: Dexuan Cui <decui at microsoft.com>
+Date: Wed, 10 Dec 2014 03:33:20 -0800
+Subject: [08/14] tools: hv: kvp_daemon: make IPv6-only-injection work
+Origin: https://git.kernel.org/linus/787d61822525295399f97390bca3e1bb4ce7a6b3
+
+In the case the host only injects an IPv6 address, the dhcp_enabled flag is
+true (it's only for IPv4 according to Hyper-V host team), but we still need to
+proceed to parse the IPv6 information.
+
+Cc: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Dexuan Cui <decui at microsoft.com>
+Reviewed-By: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 6a6432a..4b3ee35 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -1308,16 +1308,17 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val)
+ if (error)
+ goto setval_error;
+
++ /*
++ * The dhcp_enabled flag is only for IPv4. In the case the host only
++ * injects an IPv6 address, the flag is true, but we still need to
++ * proceed to parse and pass the IPv6 information to the
++ * disto-specific script hv_set_ifconfig.
++ */
+ if (new_val->dhcp_enabled) {
+ error = kvp_write_file(file, "BOOTPROTO", "", "dhcp");
+ if (error)
+ goto setval_error;
+
+- /*
+- * We are done!.
+- */
+- goto setval_done;
+-
+ } else {
+ error = kvp_write_file(file, "BOOTPROTO", "", "none");
+ if (error)
+@@ -1345,7 +1346,6 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val)
+ if (error)
+ goto setval_error;
+
+-setval_done:
+ fclose(file);
+
+ /*
diff --git a/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch b/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch
new file mode 100644
index 0000000..7aa1a57
--- /dev/null
+++ b/debian/patches/0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch
@@ -0,0 +1,41 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Fri, 9 Jan 2015 22:18:52 -0800
+Subject: [09/14] Tools: hv: remove unused bytes_written from kvp_update_file()
+Origin: https://git.kernel.org/linus/77ce247a8dbc587564dbfcb16fc6d09f6f85b31b
+
+fwrite() does not actually return the number of bytes written and
+this value is being ignored anyway and ferror() is being called to
+check for an error. As we assign to this variable and never use it
+we get the following compile-time warning:
+hv_kvp_daemon.c:149:9: warning: variable .bytes_written. set but not used [-Wunused-but-set-variable]
+Remove bytes_written completely.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index 4b3ee35..fe79009 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -147,7 +147,6 @@ static void kvp_release_lock(int pool)
+ static void kvp_update_file(int pool)
+ {
+ FILE *filep;
+- size_t bytes_written;
+
+ /*
+ * We are going to write our in-memory registry out to
+@@ -163,8 +162,7 @@ static void kvp_update_file(int pool)
+ exit(EXIT_FAILURE);
+ }
+
+- bytes_written = fwrite(kvp_file_info[pool].records,
+- sizeof(struct kvp_record),
++ fwrite(kvp_file_info[pool].records, sizeof(struct kvp_record),
+ kvp_file_info[pool].num_records, filep);
+
+ if (ferror(filep) || fclose(filep)) {
diff --git a/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch b/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch
new file mode 100644
index 0000000..943e173
--- /dev/null
+++ b/debian/patches/0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch
@@ -0,0 +1,116 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Fri, 9 Jan 2015 22:18:53 -0800
+Subject: [10/14] Tools: hv: address compiler warnings for hv_kvp_daemon.c
+Origin: https://git.kernel.org/linus/69258c058d0a7e0a6433dae7e336c316d28129fc
+
+This patch addresses two types of compiler warnings:
+... warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
+and
+... warning: pointer targets in passing argument N of .kvp_.... differ in signedness [-Wpointer-sign]
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_kvp_daemon.c | 25 ++++++++++++-------------
+ 1 file changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
+index fe79009..408bb07 100644
+--- a/tools/hv/hv_kvp_daemon.c
++++ b/tools/hv/hv_kvp_daemon.c
+@@ -308,7 +308,7 @@ static int kvp_file_init(void)
+ return 0;
+ }
+
+-static int kvp_key_delete(int pool, const char *key, int key_size)
++static int kvp_key_delete(int pool, const __u8 *key, int key_size)
+ {
+ int i;
+ int j, k;
+@@ -351,8 +351,8 @@ static int kvp_key_delete(int pool, const char *key, int key_size)
+ return 1;
+ }
+
+-static int kvp_key_add_or_modify(int pool, const char *key, int key_size, const char *value,
+- int value_size)
++static int kvp_key_add_or_modify(int pool, const __u8 *key, int key_size,
++ const __u8 *value, int value_size)
+ {
+ int i;
+ int num_records;
+@@ -405,7 +405,7 @@ static int kvp_key_add_or_modify(int pool, const char *key, int key_size, const
+ return 0;
+ }
+
+-static int kvp_get_value(int pool, const char *key, int key_size, char *value,
++static int kvp_get_value(int pool, const __u8 *key, int key_size, __u8 *value,
+ int value_size)
+ {
+ int i;
+@@ -437,8 +437,8 @@ static int kvp_get_value(int pool, const char *key, int key_size, char *value,
+ return 1;
+ }
+
+-static int kvp_pool_enumerate(int pool, int index, char *key, int key_size,
+- char *value, int value_size)
++static int kvp_pool_enumerate(int pool, int index, __u8 *key, int key_size,
++ __u8 *value, int value_size)
+ {
+ struct kvp_record *record;
+
+@@ -659,7 +659,7 @@ static char *kvp_if_name_to_mac(char *if_name)
+ char *p, *x;
+ char buf[256];
+ char addr_file[256];
+- int i;
++ unsigned int i;
+ char *mac_addr = NULL;
+
+ snprintf(addr_file, sizeof(addr_file), "%s%s%s", "/sys/class/net/",
+@@ -698,7 +698,7 @@ static char *kvp_mac_to_if_name(char *mac)
+ char buf[256];
+ char *kvp_net_dir = "/sys/class/net/";
+ char dev_id[256];
+- int i;
++ unsigned int i;
+
+ dir = opendir(kvp_net_dir);
+ if (dir == NULL)
+@@ -748,7 +748,7 @@ static char *kvp_mac_to_if_name(char *mac)
+
+
+ static void kvp_process_ipconfig_file(char *cmd,
+- char *config_buf, int len,
++ char *config_buf, unsigned int len,
+ int element_size, int offset)
+ {
+ char buf[256];
+@@ -766,7 +766,7 @@ static void kvp_process_ipconfig_file(char *cmd,
+ if (offset == 0)
+ memset(config_buf, 0, len);
+ while ((p = fgets(buf, sizeof(buf), file)) != NULL) {
+- if ((len - strlen(config_buf)) < (element_size + 1))
++ if (len < strlen(config_buf) + element_size + 1)
+ break;
+
+ x = strchr(p, '\n');
+@@ -914,7 +914,7 @@ static int kvp_process_ip_address(void *addrp,
+
+ static int
+ kvp_get_ip_info(int family, char *if_name, int op,
+- void *out_buffer, int length)
++ void *out_buffer, unsigned int length)
+ {
+ struct ifaddrs *ifap;
+ struct ifaddrs *curp;
+@@ -1017,8 +1017,7 @@ kvp_get_ip_info(int family, char *if_name, int op,
+ weight += hweight32(&w[i]);
+
+ sprintf(cidr_mask, "/%d", weight);
+- if ((length - sn_offset) <
+- (strlen(cidr_mask) + 1))
++ if (length < sn_offset + strlen(cidr_mask) + 1)
+ goto gather_ipaddr;
+
+ if (sn_offset == 0)
diff --git a/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch b/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch
new file mode 100644
index 0000000..c690f10
--- /dev/null
+++ b/debian/patches/0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch
@@ -0,0 +1,39 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Fri, 9 Jan 2015 22:18:54 -0800
+Subject: [11/14] Tools: hv: address compiler warnings for hv_fcopy_daemon.c
+Origin: https://git.kernel.org/linus/aba474b8185d60ca8cdbf3049fe6d655aa761e23
+
+This patch addresses two types of compiler warnings:
+... warning: unused variable .fd. [-Wunused-variable]
+and
+... warning: format .%s. expects argument of type .char *., but argument 5 has type .__u16 *. [-Wformat=]
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index f437d73..1a23872 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -51,7 +51,7 @@ static int hv_start_fcopy(struct hv_start_fcopy *smsg)
+
+ p = (char *)smsg->path_name;
+ snprintf(target_fname, sizeof(target_fname), "%s/%s",
+- (char *)smsg->path_name, smsg->file_name);
++ (char *)smsg->path_name, (char *)smsg->file_name);
+
+ syslog(LOG_INFO, "Target file name: %s", target_fname);
+ /*
+@@ -137,7 +137,7 @@ void print_usage(char *argv[])
+
+ int main(int argc, char *argv[])
+ {
+- int fd, fcopy_fd, len;
++ int fcopy_fd, len;
+ int error;
+ int daemonize = 1, long_index = 0, opt;
+ int version = FCOPY_CURRENT_VERSION;
diff --git a/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch b/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch
new file mode 100644
index 0000000..fe3c477
--- /dev/null
+++ b/debian/patches/0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch
@@ -0,0 +1,32 @@
+From: Vitaly Kuznetsov <vkuznets at redhat.com>
+Date: Fri, 9 Jan 2015 22:18:55 -0800
+Subject: [12/14] Tools: hv: do not add redundant '/' in hv_start_fcopy()
+Origin: https://git.kernel.org/linus/c1136da62170465920eea1ae9ba9ce2234091f77
+
+We don't need to add additional '/' to smsg->path_name as snprintf("%s/%s")
+does the right thing. Without the patch we get doubled '//' in the log message.
+
+Signed-off-by: Vitaly Kuznetsov <vkuznets at redhat.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_fcopy_daemon.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/tools/hv/hv_fcopy_daemon.c b/tools/hv/hv_fcopy_daemon.c
+index 1a23872..9445d8f 100644
+--- a/tools/hv/hv_fcopy_daemon.c
++++ b/tools/hv/hv_fcopy_daemon.c
+@@ -43,12 +43,6 @@ static int hv_start_fcopy(struct hv_start_fcopy *smsg)
+ int error = HV_E_FAIL;
+ char *q, *p;
+
+- /*
+- * If possile append a path seperator to the path.
+- */
+- if (strlen((char *)smsg->path_name) < (W_MAX_PATH - 2))
+- strcat((char *)smsg->path_name, "/");
+-
+ p = (char *)smsg->path_name;
+ snprintf(target_fname, sizeof(target_fname), "%s/%s",
+ (char *)smsg->path_name, (char *)smsg->file_name);
diff --git a/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch b/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch
new file mode 100644
index 0000000..19f186a
--- /dev/null
+++ b/debian/patches/0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch
@@ -0,0 +1,33 @@
+From: Dexuan Cui <decui at microsoft.com>
+Date: Wed, 18 Mar 2015 12:29:26 -0700
+Subject: [13/14] tools: hv: fcopy_daemon: support >2GB files for x86_32 guest
+Origin: https://git.kernel.org/linus/b4affbbb7217e440f80c922b2b304795758d40bb
+
+Without this patch, hv_fcopy_daemon's hv_copy_data() -> pwrite()
+will fail for >2GB file offset.
+
+The current char-next branch is broken and this patch fixes
+the bug.
+
+Signed-off-by: Alex Ng <alexng at microsoft.com>
+Signed-off-by: Dexuan Cui <decui at microsoft.com>
+Cc: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/hv/Makefile b/tools/hv/Makefile
+index 99ffe61..a8ab795 100644
+--- a/tools/hv/Makefile
++++ b/tools/hv/Makefile
+@@ -3,7 +3,7 @@
+ CC = $(CROSS_COMPILE)gcc
+ PTHREAD_LIBS = -lpthread
+ WARNINGS = -Wall -Wextra
+-CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS)
++CFLAGS = $(WARNINGS) -g $(PTHREAD_LIBS) $(shell getconf LFS_CFLAGS)
+
+ all: hv_kvp_daemon hv_vss_daemon hv_fcopy_daemon
+ %: %.c
diff --git a/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch b/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch
new file mode 100644
index 0000000..309c45f
--- /dev/null
+++ b/debian/patches/0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch
@@ -0,0 +1,58 @@
+From: Vaughan Cao <vaughan.cao at oracle.com>
+Date: Wed, 18 Mar 2015 12:29:28 -0700
+Subject: [14/14] hv: hypervvssd: call endmntent before call setmntent again
+Origin: https://git.kernel.org/linus/4ce50e9491c5c92baf8bb7af85eb25398d3f70af
+
+If freeze fails, vss_operate will re-enter itself to thaw. But it forgets
+to call endmntent() before it recalls setmntent() again.
+
+Signed-off-by: Vaughan Cao <vaughan.cao at oracle.com>
+Signed-off-by: K. Y. Srinivasan <kys at microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
+---
+ tools/hv/hv_vss_daemon.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/tools/hv/hv_vss_daemon.c b/tools/hv/hv_vss_daemon.c
+index 5e63f70..506dd01 100644
+--- a/tools/hv/hv_vss_daemon.c
++++ b/tools/hv/hv_vss_daemon.c
+@@ -81,6 +81,7 @@ static int vss_operate(int operation)
+ char match[] = "/dev/";
+ FILE *mounts;
+ struct mntent *ent;
++ char errdir[1024] = {0};
+ unsigned int cmd;
+ int error = 0, root_seen = 0, save_errno = 0;
+
+@@ -115,6 +116,8 @@ static int vss_operate(int operation)
+ goto err;
+ }
+
++ endmntent(mounts);
++
+ if (root_seen) {
+ error |= vss_do_freeze("/", cmd);
+ if (error && operation == VSS_OP_FREEZE)
+@@ -124,16 +127,19 @@ static int vss_operate(int operation)
+ goto out;
+ err:
+ save_errno = errno;
++ if (ent) {
++ strncpy(errdir, ent->mnt_dir, sizeof(errdir)-1);
++ endmntent(mounts);
++ }
+ vss_operate(VSS_OP_THAW);
+ /* Call syslog after we thaw all filesystems */
+ if (ent)
+ syslog(LOG_ERR, "FREEZE of %s failed; error:%d %s",
+- ent->mnt_dir, save_errno, strerror(save_errno));
++ errdir, save_errno, strerror(save_errno));
+ else
+ syslog(LOG_ERR, "FREEZE of / failed; error:%d %s", save_errno,
+ strerror(save_errno));
+ out:
+- endmntent(mounts);
+ return error;
+ }
+
diff --git a/debian/patches/series b/debian/patches/series
index 7e21461..2771d92 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -4,3 +4,17 @@ tools-perf-install.patch
usbip-document-tcp-wrappers.patch
kbuild-fix-recordmcount-dependency.patch
perf-tools-fix-arm64-build-error.patch
+0001-Tools-hv-fix-file-overwriting-of-hv_fcopy_daemon.patch
+0002-Tools-hv-vssdaemon-ignore-the-EBUSY-on-multiple-free.patch
+0003-tools-hv-introduce-n-no-daemon-option.patch
+0004-Tools-hv-vssdaemon-report-freeze-errors.patch
+0005-Tools-hv-vssdaemon-skip-all-filesystems-mounted-read.patch
+0006-tools-hv-ignore-ENOBUFS-and-ENOMEM-in-the-KVP-daemon.patch
+0007-tools-hv-Makefile-Add-hv_fcopy_daemon-to-Makefile.patch
+0008-tools-hv-kvp_daemon-make-IPv6-only-injection-work.patch
+0009-Tools-hv-remove-unused-bytes_written-from-kvp_update.patch
+0010-Tools-hv-address-compiler-warnings-for-hv_kvp_daemon.patch
+0011-Tools-hv-address-compiler-warnings-for-hv_fcopy_daem.patch
+0012-Tools-hv-do-not-add-redundant-in-hv_start_fcopy.patch
+0013-tools-hv-fcopy_daemon-support-2GB-files-for-x86_32-g.patch
+0014-hv-hypervvssd-call-endmntent-before-call-setmntent-a.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux-tools.git
More information about the Kernel-svn-changes
mailing list