2011/5/13 Vadim Zhukov <[email protected]>:
> On 2 May 2011 G. 16:05:08 David Coppa wrote:
>> PING.
>
> Sorry for sooooo looooooonnnng delaaaaaaay. :(
>
>> On Thu, Apr 21, 2011 at 2:03 PM, Otto Moerbeek <[email protected]> wrote:
>> > I think there a bug, see inline.
>
> Yep. I also fixed extern declaration in mkfs.c.
>
> (lint prints out many-many lines of warnings for mkfs.c, and it surely
> needs love, but this is, of course, completely another case...)
Thanks a lot!
Otto, can this go in now?
Ciao,
David
> Index: mkfs.c
> ===================================================================
> RCS file: /cvs/src/sbin/newfs/mkfs.c,v
> retrieving revision 1.74
> diff -u -p -r1.74 mkfs.c
> --- mkfs.c 21 Mar 2010 09:13:30 -0000 1.74
> +++ mkfs.c 12 May 2011 22:04:36 -0000
> @@ -87,7 +87,7 @@ extern int mfs; /* run as the memory ba
> extern int Nflag; /* run mkfs without writing file system */
> extern int Oflag; /* format as an 4.3BSD file system */
> extern daddr64_t fssize; /* file system size */
> -extern int sectorsize; /* bytes/sector */
> +extern long long sectorsize; /* bytes/sector */
> extern int fsize; /* fragment size */
> extern int bsize; /* block size */
> extern int maxfrgspercg; /* maximum fragments per cylinder group */
> @@ -404,8 +404,8 @@ mkfs(struct partition *pp, char *fsys, i
> lastminfpg = roundup(sblock.fs_iblkno +
> sblock.fs_ipg / INOPF(&sblock), sblock.fs_frag);
> if (sblock.fs_size < lastminfpg)
> - errx(28, "file system size %jd < minimum size of
%d",
> - (intmax_t)sblock.fs_size, lastminfpg);
> + errx(28, "file system size %jd < minimum size of %d
"
> + "sectors", (intmax_t)sblock.fs_size,
lastminfpg);
>
> if (sblock.fs_size % sblock.fs_fpg >= lastminfpg ||
> sblock.fs_size % sblock.fs_fpg == 0)
> Index: newfs.8
> ===================================================================
> RCS file: /cvs/src/sbin/newfs/newfs.8,v
> retrieving revision 1.69
> diff -u -p -r1.69 newfs.8
> --- newfs.8 31 Mar 2011 11:17:58 -0000 1.69
> +++ newfs.8 12 May 2011 22:04:36 -0000
> @@ -218,6 +218,13 @@ With this option,
> will not print extraneous information like superblock backups.
> .It Fl S Ar sector-size
> The size of a sector in bytes (almost always 512).
> +Alternatively
> +.Ar sector-size
> +may instead use a multiplier, as documented in
> +.Xr scan_scaled 3 .
> +.Ar sector-size
> +should be 512 or a multiple of it because the kernel operates
> +512\-byte blocks internally.
> A sector is the smallest addressable unit on the physical device.
> Changing this is useful only when using
> .Nm
> @@ -227,14 +234,19 @@ created (for example on a write-once dis
> Note that changing this
> from its default will make it impossible for
> .Xr fsck 8
> -to find the alternate superblocks if the standard superblock is
> -lost.
> +to find the alternate superblocks automatically if the standard
> +superblock is lost.
> .It Fl s Ar size
> -The size of the file system in sectors.
> -This value is multiplied by the number of 512\-byte blocks in a sector
> -to yield the size of the file system in 512\-byte blocks, which is the
value
> -used by the kernel.
> -The maximum size of an FFS file system is 2,147,483,647 (2^31 \- 1) of
these
> +The size of the file system in sectors (see
> +.Fl S ) .
> +Alternatively
> +.Ar size
> +may instead use a multiplier, as documented in
> +.Xr scan_scaled 3 ,
> +to specify size in bytes; in this case
> +.Ar size
> +is rounded up to the next sector boundary.
> +The maximum size of an FFS file system is 2,147,483,647 (2^31 \- 1) of
> 512\-byte blocks, slightly less than 1 TB.
> FFS2 file systems can be as large as 64 PB.
> Note however that for
> Index: newfs.c
> ===================================================================
> RCS file: /cvs/src/sbin/newfs/newfs.c,v
> retrieving revision 1.89
> diff -u -p -r1.89 newfs.c
> --- newfs.c 26 Apr 2011 14:02:14 -0000 1.89
> +++ newfs.c 12 May 2011 22:04:36 -0000
> @@ -114,7 +114,7 @@ int mfs; /* run as the memory based
fi
> int Nflag; /* run without writing file system */
> int Oflag = 1; /* 0 = 4.3BSD ffs, 1 = 4.4BSD ffs, 2 = ffs2
*/
> daddr64_t fssize; /* file system size */
> -int sectorsize; /* bytes/sector */
> +long long sectorsize; /* bytes/sector */
> int fsize = 0; /* fragment size */
> int bsize = 0; /* block size */
> int maxfrgspercg = INT_MAX; /* maximum fragments per cylinder group */
> @@ -169,6 +169,8 @@ main(int argc, char *argv[])
> char **saveargv = argv;
> int ffsflag = 1;
> const char *errstr;
> + long long fssize_input = 0;
> + int fssize_usebytes = 0;
>
> if (strstr(__progname, "mfs"))
> mfs = Nflag = quiet = 1;
> @@ -192,9 +194,9 @@ main(int argc, char *argv[])
> oflagset = 1;
> break;
> case 'S':
> - sectorsize = strtonum(optarg, 1, INT_MAX, &errstr);
> - if (errstr)
> - fatal("sector size is %s: %s", errstr,
optarg);
> + if (scan_scaled(optarg, §orsize) == -1 ||
> + sectorsize <= 0 || (sectorsize % DEV_BSIZE))
> + fatal("sector size invalid: %s", optarg);
> break;
> case 'T':
> disktype = optarg;
> @@ -264,11 +266,17 @@ main(int argc, char *argv[])
> case 'q':
> quiet = 1;
> break;
> +
> case 's':
> - fssize = strtonum(optarg, 1, LLONG_MAX, &errstr);
> - if (errstr)
> - fatal("file system size is %s: %s",
> - errstr, optarg);
> + if (scan_scaled(optarg, &fssize_input) == -1 ||
> + fssize_input <= 0)
> + fatal("file system size invalid: %s",
optarg);
> + fssize_usebytes = 0; /* in case of multiple -s
*/
> + for (s1 = optarg; *s1 != '\0'; s1++)
> + if (isalpha(*s1)) {
> + fssize_usebytes = 1;
> + break;
> + }
> break;
> case 't':
> fstype = optarg;
> @@ -414,17 +422,25 @@ main(int argc, char *argv[])
> argv[0], *cp);
> }
> havelabel:
> - if (fssize == 0)
> - fssize = DL_GETPSIZE(pp);
> - if (fssize > DL_GETPSIZE(pp) && !mfs)
> - fatal("%s: maximum file system size on the `%c' partition is
%lld",
> - argv[0], *cp, DL_GETPSIZE(pp));
> -
> if (sectorsize == 0) {
> sectorsize = lp->d_secsize;
> if (sectorsize <= 0)
> fatal("%s: no default sector size", argv[0]);
> }
> +
> + if (fssize_usebytes) {
> + fssize = (daddr64_t)fssize_input / (daddr64_t)sectorsize;
> + if ((daddr64_t)fssize_input % (daddr64_t)sectorsize != 0)
> + fssize++;
> + } else if (fssize_input == 0)
> + fssize = DL_GETPSIZE(pp);
> + else
> + fssize = (daddr64_t)fssize_input;
> +
> + if (fssize > DL_GETPSIZE(pp) && !mfs)
> + fatal("%s: maximum file system size on the `%c' partition is
"
> + "%lld sectors", argv[0], *cp, DL_GETPSIZE(pp));
> +
> fssize *= sectorsize / DEV_BSIZE;
> if (oflagset == 0 && fssize >= INT_MAX)
> Oflag = 2; /* FFS2 */