Re: newfs broken in -CURRENT after 204654

From: Gary Jennejohn <gary.jennejohn_at_freenet.de>
Date: Mon, 8 Mar 2010 12:56:43 +0100
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)
> _at__at_ -132,6 +132,7 _at__at_
>  	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 */
>  
> _at__at_ -327,9 +328,12 _at__at_
>  		mediasize = st.st_size;
>  		/* set fssize from the partition */
>  	} else {
> -	    if (sectorsize == 0)
> -		if (ioctl(disk.d_fd, DIOCGSECTORSIZE, &sectorsize) == -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
Received on Mon Mar 08 2010 - 10:56:46 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:01 UTC