From cc9c772379a2e074fc46d5bbd3cd415dd143ddfe Mon Sep 17 00:00:00 2001 From: Pawel Wodkowski Date: Fri, 4 May 2018 00:39:57 +0200 Subject: [PATCH] spdk_tgt: fix parsing vhost arguments 'S' and 'f' was not ported from vhost target app. Change-Id: I1a450b83e969fc3ede1d9b5c2478acd350bbd601 Signed-off-by: Pawel Wodkowski Reviewed-on: https://review.gerrithub.io/410091 Reviewed-by: Shuhei Matsumoto Reviewed-by: Daniel Verkamp Tested-by: SPDK Automated Test System --- app/spdk_tgt/spdk_tgt.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/app/spdk_tgt/spdk_tgt.c b/app/spdk_tgt/spdk_tgt.c index 237b12ede..3659eadfd 100644 --- a/app/spdk_tgt/spdk_tgt.c +++ b/app/spdk_tgt/spdk_tgt.c @@ -42,18 +42,47 @@ #undef SPDK_CONFIG_VHOST #endif +#ifdef SPDK_CONFIG_VHOST +#define SPDK_VHOST_OPTS "S:" +#else +#define SPDK_VHOST_OPTS +#endif + +static const char *g_pid_path = NULL; +static const char g_spdk_tgt_get_opts_string[] = "f:" SPDK_VHOST_OPTS; + static void spdk_tgt_usage(void) { + printf(" -f pidfile save pid to file under given path\n"); #ifdef SPDK_CONFIG_VHOST printf(" -S dir directory where to create vhost sockets (default: pwd)\n"); #endif } +static void +spdk_tgt_save_pid(const char *pid_path) +{ + FILE *pid_file; + + pid_file = fopen(pid_path, "w"); + if (pid_file == NULL) { + fprintf(stderr, "Couldn't create pid file '%s': %s\n", pid_path, strerror(errno)); + exit(EXIT_FAILURE); + } + + fprintf(pid_file, "%d\n", getpid()); + fclose(pid_file); +} + + static void spdk_tgt_parse_arg(int ch, char *arg) { switch (ch) { + case 'f': + g_pid_path = arg; + break; #ifdef SPDK_CONFIG_VHOST case 'S': spdk_vhost_set_socket_path(arg); @@ -65,6 +94,10 @@ spdk_tgt_parse_arg(int ch, char *arg) static void spdk_tgt_started(void *arg1, void *arg2) { + if (g_pid_path) { + spdk_tgt_save_pid(g_pid_path); + } + if (getenv("MEMZONE_DUMP") != NULL) { spdk_memzone_dump(stdout); fflush(stdout); @@ -79,7 +112,7 @@ main(int argc, char **argv) spdk_app_opts_init(&opts); opts.name = "spdk_tgt"; - if ((rc = spdk_app_parse_args(argc, argv, &opts, "", + if ((rc = spdk_app_parse_args(argc, argv, &opts, g_spdk_tgt_get_opts_string, spdk_tgt_parse_arg, spdk_tgt_usage)) != SPDK_APP_PARSE_ARGS_SUCCESS) { return rc;