linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] tools: hv: introduce -n/--no-daemon option
@ 2014-10-22 16:07 Vitaly Kuznetsov
  2014-10-22 16:55 ` KY Srinivasan
  0 siblings, 1 reply; 3+ messages in thread
From: Vitaly Kuznetsov @ 2014-10-22 16:07 UTC (permalink / raw)
  To: K. Y. Srinivasan, Haiyang Zhang, devel; +Cc: linux-kernel

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@redhat.com>
---
 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 6a213b8..9ae2b6e 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;
 
@@ -131,7 +132,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;
@@ -143,8 +152,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);
-- 
1.9.3


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* RE: [PATCH] tools: hv: introduce -n/--no-daemon option
  2014-10-22 16:07 [PATCH] tools: hv: introduce -n/--no-daemon option Vitaly Kuznetsov
@ 2014-10-22 16:55 ` KY Srinivasan
  2014-11-04 13:45   ` Vitaly Kuznetsov
  0 siblings, 1 reply; 3+ messages in thread
From: KY Srinivasan @ 2014-10-22 16:55 UTC (permalink / raw)
  To: Vitaly Kuznetsov, Haiyang Zhang, devel; +Cc: linux-kernel



> -----Original Message-----
> From: Vitaly Kuznetsov [mailto:vkuznets@redhat.com]
> Sent: Wednesday, October 22, 2014 9:07 AM
> To: KY Srinivasan; Haiyang Zhang; devel@linuxdriverproject.org
> Cc: linux-kernel@vger.kernel.org
> Subject: [PATCH] tools: hv: introduce -n/--no-daemon option
> 
> 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@redhat.com>
You may want to include Greg KH in the "to" list.
Signed-off-by:  K. Y. Srinivasan <kys@microsoft.com>


> ---
>  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
> 6a213b8..9ae2b6e 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;
> 
> @@ -131,7 +132,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;
> @@ -143,8 +152,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);
> --
> 1.9.3


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] tools: hv: introduce -n/--no-daemon option
  2014-10-22 16:55 ` KY Srinivasan
@ 2014-11-04 13:45   ` Vitaly Kuznetsov
  0 siblings, 0 replies; 3+ messages in thread
From: Vitaly Kuznetsov @ 2014-11-04 13:45 UTC (permalink / raw)
  To: KY Srinivasan, Greg Kroah-Hartman; +Cc: Haiyang Zhang, devel, linux-kernel

KY Srinivasan <kys@microsoft.com> writes:

>> -----Original Message-----
>> From: Vitaly Kuznetsov [mailto:vkuznets@redhat.com]
>> Sent: Wednesday, October 22, 2014 9:07 AM
>> To: KY Srinivasan; Haiyang Zhang; devel@linuxdriverproject.org
>> Cc: linux-kernel@vger.kernel.org
>> Subject: [PATCH] tools: hv: introduce -n/--no-daemon option
>> 
>> 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@redhat.com>
> You may want to include Greg KH in the "to" list.

For some reason he's missing on the get_maintainer.pl output for all
Hyper-V parts.

Greg, will you pick this up or do I need to resend?

> Signed-off-by:  K. Y. Srinivasan <kys@microsoft.com>
>

Thanks!

>> ---
>>  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
>> 6a213b8..9ae2b6e 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;
>> 
>> @@ -131,7 +132,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;
>> @@ -143,8 +152,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);
>> --
>> 1.9.3

-- 
  Vitaly

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-11-04 13:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-22 16:07 [PATCH] tools: hv: introduce -n/--no-daemon option Vitaly Kuznetsov
2014-10-22 16:55 ` KY Srinivasan
2014-11-04 13:45   ` Vitaly Kuznetsov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).