[PATCH 2/2] kvm tools: Simplify search for root device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

Signed-off-by: Sasha Levin <levinsasha928@xxxxxxxxx>
---
 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux