[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