From 73cd9bf26066cad0d4a483e31e1d89802a7ca1f9 Mon Sep 17 00:00:00 2001 From: Gene Cumm Date: Wed, 11 May 2011 16:03:30 +0000 Subject: extlinux/main.c: Fix geometry handling 1) ioctl HDIO_GETGEO expects a pointer to a struct hd_geometry 2) struct stat's st_dev is the parent file used; st_rdev is what we want Reported-by: Michael Tokarev Tested-By: Michael Tokarev Signed-off-by: Gene Cumm --- (limited to 'extlinux/main.c') diff --git a/extlinux/main.c b/extlinux/main.c index e5212a9..6aa6202 100755 --- a/extlinux/main.c +++ b/extlinux/main.c @@ -112,7 +112,7 @@ static int sysfs_get_offset(int devfd, unsigned long *start) if ((size_t)snprintf(sysfs_name, sizeof sysfs_name, "/sys/dev/block/%u:%u/start", - major(st.st_dev), minor(st.st_dev)) + major(st.st_rdev), minor(st.st_rdev)) >= sizeof sysfs_name) return -1; @@ -153,7 +153,7 @@ int get_geometry(int devfd, uint64_t totalbytes, struct hd_geometry *geo) memset(geo, 0, sizeof *geo); - if (!ioctl(devfd, HDIO_GETGEO, &geo)) { + if (!ioctl(devfd, HDIO_GETGEO, geo)) { goto ok; } else if (!ioctl(devfd, FDGETPRM, &fd_str)) { geo->heads = fd_str.head; -- cgit v0.9.2