Use /dev/block to find the block device used for root
instead of searching through mounts.

Signed-off-by: Sasha Levin <levinsasha...@gmail.com>
---
 tools/kvm/kvm-run.c |   48 +++---------------------------------------------
 1 files changed, 3 insertions(+), 45 deletions(-)

diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
index d5a952f..6fee8ae 100644
--- a/tools/kvm/kvm-run.c
+++ b/tools/kvm/kvm-run.c
@@ -249,56 +249,14 @@ static const char *find_kernel(void)
 
 static int root_device(char *dev, long *part)
 {
-       FILE   *fp;
-       char   *line;
-       int    tmp;
-       size_t nr_read;
-       char   device[PATH_MAX];
-       char   mnt_pt[PATH_MAX];
-       char   resolved_path[PATH_MAX];
-       char   *p;
        struct stat st;
 
-       fp = fopen("/proc/mounts", "r");
-       if (!fp)
+       if (stat("/", &st) < 0)
                return -1;
 
-       line = NULL;
-       tmp  = 0;
-       while (!feof(fp)) {
-               if (getline(&line, &nr_read, fp) < 0)
-                       break;
-               sscanf(line, "%s %s", device, mnt_pt);
-               if (!strncmp(device, "/dev", 4) && !strcmp(mnt_pt, "/")) {
-                       tmp = 1;
-                       break;
-               }
-       }
-       fclose(fp);
-       free(line);
-
-       if (!tmp)
-               return -1;
-
-       /* get the absolute path */
-       if (!realpath(device, resolved_path))
-               return -1;
-
-       /* find the partition number */
-       p = resolved_path;
-       while (*p) {
-               if (isdigit(*p)) {
-                       strncpy(dev, resolved_path, p - resolved_path);
-                       *part = atol(p);
-                       break;
-               }
-               p++;
-       }
-
-       /* verify the device path */
-       if (stat(dev, &st) < 0)
-               return -1;
+       *part = minor(st.st_dev);
 
+       sprintf(dev, "/dev/block/%u:0", major(st.st_dev));
        if (access(dev, R_OK) < 0)
                return -1;
 
-- 
1.7.5.rc3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to