Module Name: src Committed By: haad Date: Thu Dec 23 21:39:09 UTC 2010
Modified Files: src/external/gpl2/lvm2/dist/lib/device: dev-io.c Log Message: Change way how we get device size from device. Do not use LSEEK but DIOCGWEDGEINFO and DIOCGDINFO. This should fix problem with raidframe + lvm reported by Toby Karyadi on current-us...@. Thanks for reporting this issue. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/external/gpl2/lvm2/dist/lib/device/dev-io.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/gpl2/lvm2/dist/lib/device/dev-io.c diff -u src/external/gpl2/lvm2/dist/lib/device/dev-io.c:1.7 src/external/gpl2/lvm2/dist/lib/device/dev-io.c:1.8 --- src/external/gpl2/lvm2/dist/lib/device/dev-io.c:1.7 Thu Dec 23 14:46:25 2010 +++ src/external/gpl2/lvm2/dist/lib/device/dev-io.c Thu Dec 23 21:39:08 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: dev-io.c,v 1.7 2010/12/23 14:46:25 mlelstv Exp $ */ +/* $NetBSD: dev-io.c,v 1.8 2010/12/23 21:39:08 haad Exp $ */ /* * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. @@ -275,26 +275,20 @@ log_sys_error("open", name); #endif return 0; - } - -#ifdef __NetBSD__ - if ((*size = lseek (fd, 0, SEEK_END)) < 0) { - log_sys_error("lseek SEEK_END", name); - close(fd); - return 0; } - if (ioctl(fd, DIOCGDINFO, &lab) < 0) { - if (ioctl(fd, DIOCGWEDGEINFO, &dkw) < 0) { - log_debug("ioctl DIOCGWEDGEINFO", name); +#ifdef __NetBSD__ + /* Get info about partition/wedge */ + if (ioctl(fd, DIOCGWEDGEINFO, &dkw) == -1) { + if (ioctl(fd, DIOCGDINFO, &lab) == -1) { + log_debug("Please implement DIOCGWEDGEINFO or " + "DIOCGDINFO for disk device %s", name); close(fd); return 0; } else - if (dkw.dkw_size) - *size = dkw.dkw_size; - } else - if (lab.d_secsize) *size /= lab.d_secsize; + } else + *size = dkw.dkw_size; #else if (ioctl(fd, BLKGETSIZE64, size) < 0) { log_sys_error("ioctl BLKGETSIZE64", name);