newfs broken in -CURRENT after 204654
Gary Jennejohn
gary.jennejohn at freenet.de
Mon Mar 8 11:56:46 UTC 2010
On Mon, 8 Mar 2010 14:17:17 +0530
"Jayachandran C." <c.jayachandran at gmail.com> wrote:
> 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);
> }
>
I can't say whether this is correct, but the logic could definitely be
simplified like this, since sectorsize is known to be 0 already:
if (sectorsize == 0)
if (ioctl(disk.d_fd, DIOCGSECTORSIZE, &tsecsize) >= 0)
sectorsize = tsecsize;
---
Gary Jennejohn
More information about the freebsd-current
mailing list