From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH 2/2] kvm tools: Simplify search for root device Date: Fri, 6 May 2011 10:26:35 +0300 Message-ID: <1304666795-15251-2-git-send-email-levinsasha928@gmail.com> References: <1304666795-15251-1-git-send-email-levinsasha928@gmail.com> Cc: mingo@elte.hu, asias.hejun@gmail.com, gorcunov@gmail.com, prasadjoshi124@gmail.com, kvm@vger.kernel.org, Sasha Levin To: penberg@kernel.org Return-path: Received: from mail-wy0-f174.google.com ([74.125.82.174]:37547 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753057Ab1EFH0w (ORCPT ); Fri, 6 May 2011 03:26:52 -0400 Received: by mail-wy0-f174.google.com with SMTP id 21so2188193wya.19 for ; Fri, 06 May 2011 00:26:52 -0700 (PDT) In-Reply-To: <1304666795-15251-1-git-send-email-levinsasha928@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: Use /dev/block to find the block device used for root instead of searching through mounts. Signed-off-by: Sasha Levin --- 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