newfs broken in -CURRENT after 204654
Jayachandran C.
c.jayachandran at gmail.com
Mon Mar 8 08:44:09 UTC 2010
On Thu, Mar 04, 2010 at 06:34:03PM +0530, C. Jayachandran wrote:
> I'm testing this on the mips platform, but I think there is an issue
> with change that made sectorsize int64_t, because the ioctl
> DIOCGSECTORSIZE used to read sector size seems to take u_int. This
> quick change fixes it for me (sample patch - may be whitespace
> damaged).
I'm trying this one more time, since the issue is still unresolved.
newfs(8) broke for big-endian systems since revision 204654. This change
made sectorsize variable int64_t, and now it cannot be passed to the ioctl
DIOCGSECTORSIZE.
The patch below (updated from the previous one) fixes it, please review and
apply if correct.
Thanks,
JC.
Index: sbin/newfs/newfs.c
===================================================================
--- sbin/newfs/newfs.c (revision 204701)
+++ sbin/newfs/newfs.c (working copy)
@@ -132,6 +132,7 @@
char *cp, *special;
intmax_t reserved;
int ch, i, rval;
+ u_int tsecsize;
off_t mediasize;
char part_name; /* partition name, default to full disk */
@@ -327,9 +328,12 @@
mediasize = st.st_size;
/* set fssize from the partition */
} else {
- if (sectorsize == 0)
- if (ioctl(disk.d_fd, DIOCGSECTORSIZE, §orsize) == -1)
+ if (sectorsize == 0) {
+ if (ioctl(disk.d_fd, DIOCGSECTORSIZE, &tsecsize) == -1)
sectorsize = 0; /* back out on error for safety */
+ else
+ sectorsize = tsecsize;
+ }
if (sectorsize && ioctl(disk.d_fd, DIOCGMEDIASIZE, &mediasize) != -1)
getfssize(&fssize, special, mediasize / sectorsize, reserved);
}
More information about the freebsd-current
mailing list