ports/45911: GEOM-related problem sysutils/diskcheckd does not work
Valentin Nechayev
netch at netch.kiev.ua
Tue Sep 21 19:00:48 UTC 2004
The following reply was made to PR ports/45911; it has been noted by GNATS.
From: Valentin Nechayev <netch at netch.kiev.ua>
To: bug-followup at freebsd.org
Cc:
Subject: ports/45911: GEOM-related problem sysutils/diskcheckd does not work
Date: Tue, 21 Sep 2004 22:00:23 +0300 (EEST)
Resend previous patch with minor fix. This seems to be working and correctly
reporting. Previous erroneosuly warned for incorrect sector size.
(Note that code in logreaderror() is strictly bounded to DOS partitioning
scheme and BSD labels in primary slices. This isn't too bad for now, but
may confuse when using another schemes, e.g. GPT.)
--- 0/ports/sysutils/diskcheckd/files/diskcheckd.c Mon Oct 21 03:34:31 2002
+++ 1/ports/sysutils/diskcheckd/files/diskcheckd.c Tue Sep 21 21:48:13 2004
@@ -27,7 +27,7 @@
static const char rcsid[] =
"$FreeBSD: ports/sysutils/diskcheckd/files/diskcheckd.c,v 1.6 2002/10/21 00:34:31 kris Exp $";
-#include <sys/types.h>
+#include <sys/param.h>
#include <sys/sysctl.h>
#include <ctype.h>
@@ -46,6 +46,7 @@
#define DKTYPENAMES
#define FSTYPENAMES
+#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/diskmbr.h>
@@ -757,7 +758,23 @@
void
getdisksize(struct disk *dp) {
struct disklabel label;
+#if __FreeBSD_version >= 500040
+ off_t mediasize;
+ unsigned sectorsize;
+ if (ioctl(dp->fd, DIOCGSECTORSIZE, §orsize) < 0) {
+ syslog(LOG_NOTICE, "DIOCGSECTORSIZE on %s failed: %m",
+ dp->device);
+ exit(EXIT_FAILURE);
+ }
+ if (ioctl(dp->fd, DIOCGMEDIASIZE, &mediasize) < 0) {
+ syslog(LOG_NOTICE, "DIOCGMEDIASIZE on %s failed: %m",
+ dp->device);
+ exit(EXIT_FAILURE);
+ }
+ dp->secsize = label.d_secsize = sectorsize;
+ dp->size = mediasize;
+#else
if (ioctl(dp->fd, DIOCGDINFO, &label) < 0) {
syslog(LOG_NOTICE, "DIOCGDINFO on %s failed: %m",
dp->device);
@@ -766,6 +783,7 @@
dp->secsize = label.d_secsize;
dp->size = (off_t)label.d_secperunit * label.d_secsize;
+#endif
if (label.d_secsize != 512)
syslog(LOG_NOTICE,
More information about the freebsd-ports-bugs
mailing list