Re: PROBLEM: ioctl (HDIO_GETGEO) on partition

From: Mark Lord
Date: Sat Nov 01 2008 - 09:42:56 EST


Mark Lord wrote:
Sarangi_Santosh@xxxxxxx wrote:
..
if ((sts = ioctl(fd, HDIO_GETGEO, &hd_geometry_rec)) < 0) ------->
ioctl((HDIO_GETGEO) is failing for device partition (/dev/emcpowerg1)
{
close(fd);
return OS_SYSTEM_CALL_FAILED;
}
..

And while we're at it, that code above REALLY wants
a perror(p_ppdevname) call just before the close(fd) line.
That way, when it fails, you'll find out *why* it fails,
making bugs like this much easier to figure out.

..
The code should try HDIO_GETGEO_BIG before falling back to HDIO_GETGEO.
But neither will work for LARGE drives (>= 2TB) on 32-bit systems,
so the code really should try sysfs for this info before using the ioctls.

Sample code to do this correctly is in the geom.c file of recent hdparm
source code packages from sourceforge.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/