This patch allows to run previously created guestfs by simply specifying it
with the '-d' parameter.
This allows running guestfs which were created before using:
kvm setup -n [name]
Signed-off-by: Sasha Levin <[email protected]>
---
tools/kvm/builtin-run.c | 24 ++++++++++++++++++++++--
tools/kvm/include/kvm/kvm.h | 3 +++
tools/kvm/kvm.c | 2 --
3 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c
index ef1a358..725c23c 100644
--- a/tools/kvm/builtin-run.c
+++ b/tools/kvm/builtin-run.c
@@ -85,6 +85,7 @@ static bool vnc;
static bool sdl;
static bool balloon;
static bool using_rootfs;
+static bool custom_rootfs;
extern bool ioport_debug;
extern int active_console;
extern int debug_iodelay;
@@ -103,6 +104,7 @@ static int img_name_parser(const struct option *opt, const
char *arg, int unset)
{
char *sep;
struct stat st;
+ char path[PATH_MAX];
if (stat(arg, &st) == 0 &&
S_ISDIR(st.st_mode)) {
@@ -115,6 +117,21 @@ static int img_name_parser(const struct option *opt, const
char *arg, int unset)
return 0;
}
+ snprintf(path, PATH_MAX, "%s%s%s", HOME_DIR, KVM_PID_FILE_PATH, arg);
+
+ if (stat(path, &st) == 0 &&
+ S_ISDIR(st.st_mode)) {
+ char tmp[PATH_MAX];
+
+ if (realpath(path, tmp) == 0 ||
+ virtio_9p__register(kvm, tmp, "/dev/root") < 0)
+ die("Unable to initialize virtio 9p");
+ if (virtio_9p__register(kvm, "/", "hostfs") < 0)
+ die("Unable to initialize virtio 9p");
+ using_rootfs = custom_rootfs = 1;
+ return 0;
+ }
+
if (image_count >= MAX_DISK_IMAGES)
die("Currently only 4 images are supported");
@@ -739,10 +756,13 @@ int kvm_cmd_run(int argc, const char **argv, const char
*prefix)
strlcat(real_cmdline, " init=/bin/sh ",
sizeof(real_cmdline));
}
- if (using_rootfs)
+ if (using_rootfs) {
strcat(real_cmdline, " root=/dev/root rw
rootflags=rw,trans=virtio,version=9p2000.L rootfstype=9p");
- else if (!strstr(real_cmdline, "root="))
+ if (custom_rootfs)
+ strcat(real_cmdline, " init=/virt/init");
+ } else if (!strstr(real_cmdline, "root=")) {
strlcat(real_cmdline, " root=/dev/vda rw ",
sizeof(real_cmdline));
+ }
if (image_count) {
kvm->nr_disks = image_count;
diff --git a/tools/kvm/include/kvm/kvm.h b/tools/kvm/include/kvm/kvm.h
index d471cee..bb40c4c 100644
--- a/tools/kvm/include/kvm/kvm.h
+++ b/tools/kvm/include/kvm/kvm.h
@@ -24,6 +24,9 @@
#define SIGKVMRESUME (SIGRTMIN + 5)
#define SIGKVMMEMSTAT (SIGRTMIN + 6)
+#define KVM_PID_FILE_PATH "/.kvm-tools/"
+#define HOME_DIR getenv("HOME")
+
struct kvm {
int sys_fd; /* For system ioctls(), i.e.
/dev/kvm */
int vm_fd; /* For VM ioctls() */
diff --git a/tools/kvm/kvm.c b/tools/kvm/kvm.c
index bbfdea2..199c9b9 100644
--- a/tools/kvm/kvm.c
+++ b/tools/kvm/kvm.c
@@ -32,8 +32,6 @@
#include <dirent.h>
#define DEFINE_KVM_EXIT_REASON(reason) [reason] = #reason
-#define KVM_PID_FILE_PATH "/.kvm-tools/"
-#define HOME_DIR getenv("HOME")
const char *kvm_exit_reasons[] = {
DEFINE_KVM_EXIT_REASON(KVM_EXIT_UNKNOWN),
--
1.7.6.1
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html