2011/5/13 Vadim Zhukov <persg...@gmail.com>:
> 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 <o...@drijf.net> 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, &sectorsize) == -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 */

Reply via email to