svn commit: r194032 - stable/7/sbin/newfs_msdos
Andriy Gapon
avg at FreeBSD.org
Thu Jun 11 18:15:05 UTC 2009
Author: avg
Date: Thu Jun 11 18:15:03 2009
New Revision: 194032
URL: http://svn.freebsd.org/changeset/base/194032
Log:
MFC r189112: newfs_msdos: work with media that doesn't have any CHS params
Approved by: jhb (mentor)
Modified:
stable/7/sbin/newfs_msdos/ (props changed)
stable/7/sbin/newfs_msdos/newfs_msdos.c
Modified: stable/7/sbin/newfs_msdos/newfs_msdos.c
==============================================================================
--- stable/7/sbin/newfs_msdos/newfs_msdos.c Thu Jun 11 18:10:17 2009 (r194031)
+++ stable/7/sbin/newfs_msdos/newfs_msdos.c Thu Jun 11 18:15:03 2009 (r194032)
@@ -739,13 +739,25 @@ getdiskinfo(int fd, const char *fname, c
/* Maybe it's a fixed drive */
if (lp == NULL) {
if (ioctl(fd, DIOCGDINFO, &dlp) == -1) {
- if (ioctl(fd, DIOCGSECTORSIZE, &dlp.d_secsize) == -1)
+ if (bpb->bps == 0 && ioctl(fd, DIOCGSECTORSIZE, &dlp.d_secsize) == -1)
errx(1, "Cannot get sector size, %s", strerror(errno));
- if (ioctl(fd, DIOCGFWSECTORS, &dlp.d_nsectors) == -1)
- errx(1, "Cannot get number of sectors, %s", strerror(errno));
- if (ioctl(fd, DIOCGFWHEADS, &dlp.d_ntracks)== -1)
- errx(1, "Cannot get number of heads, %s", strerror(errno));
+
+ /* XXX Should we use bpb->bps if it's set? */
dlp.d_secperunit = ms / dlp.d_secsize;
+
+ if (bpb->spt == 0 && ioctl(fd, DIOCGFWSECTORS, &dlp.d_nsectors) == -1) {
+ warnx("Cannot get number of sectors per track, %s", strerror(errno));
+ dlp.d_nsectors = 63;
+ }
+ if (bpb->hds == 0 && ioctl(fd, DIOCGFWHEADS, &dlp.d_ntracks) == -1) {
+ warnx("Cannot get number of heads, %s", strerror(errno));
+ if (dlp.d_secperunit <= 63*1*1024)
+ dlp.d_ntracks = 1;
+ else if (dlp.d_secperunit <= 63*16*1024)
+ dlp.d_ntracks = 16;
+ else
+ dlp.d_ntracks = 255;
+ }
}
hs = (ms / dlp.d_secsize) - dlp.d_secperunit;
More information about the svn-src-stable-7
mailing list