diff --git a/sbin/disklabel/disklabel.c b/sbin/disklabel/disklabel.c index 4a03c2202e5b..be8a8ee37cec 100644 --- a/sbin/disklabel/disklabel.c +++ b/sbin/disklabel/disklabel.c @@ -1,4 +1,4 @@ -/* $NetBSD: disklabel.c,v 1.79 1999/12/20 18:19:18 fair Exp $ */ +/* $NetBSD: disklabel.c,v 1.80 2000/01/18 00:02:28 perseant Exp $ */ /* * Copyright (c) 1987, 1993 @@ -47,7 +47,7 @@ __COPYRIGHT("@(#) Copyright (c) 1987, 1993\n\ static char sccsid[] = "@(#)disklabel.c 8.4 (Berkeley) 5/4/95"; /* from static char sccsid[] = "@(#)disklabel.c 1.2 (Symmetric) 11/28/85"; */ #else -__RCSID("$NetBSD: disklabel.c,v 1.79 1999/12/20 18:19:18 fair Exp $"); +__RCSID("$NetBSD: disklabel.c,v 1.80 2000/01/18 00:02:28 perseant Exp $"); #endif #endif /* not lint */ @@ -1220,6 +1220,11 @@ showpartitions(f, lp) break; case FS_BSDLFS: + (void) fprintf(f, " %5d %5d %5d ", + pp->p_fsize, pp->p_fsize * pp->p_frag, + pp->p_sgs); + break; + case FS_EX2FS: (void) fprintf(f, " %5d %5d ", pp->p_fsize, pp->p_fsize * pp->p_frag); @@ -1686,6 +1691,13 @@ getasciilabel(f, lp) NXTNUM(pp->p_cpg); break; case FS_BSDLFS: + NXTNUM(pp->p_fsize); + if (pp->p_fsize == 0) + break; + NXTNUM(v); + pp->p_frag = v / pp->p_fsize; + NXTNUM(pp->p_sgs); + break; case FS_EX2FS: NXTNUM(pp->p_fsize); if (pp->p_fsize == 0) diff --git a/sbin/newfs_lfs/lfs.c b/sbin/newfs_lfs/lfs.c index 66d0c4e8d9e4..0060c15d2b09 100644 --- a/sbin/newfs_lfs/lfs.c +++ b/sbin/newfs_lfs/lfs.c @@ -1,4 +1,4 @@ -/* $NetBSD: lfs.c,v 1.6 1999/11/05 18:59:12 perseant Exp $ */ +/* $NetBSD: lfs.c,v 1.7 2000/01/18 00:02:29 perseant Exp $ */ /*- * Copyright (c) 1991, 1993 @@ -38,11 +38,12 @@ #if 0 static char sccsid[] = "@(#)lfs.c 8.5 (Berkeley) 5/24/95"; #else -__RCSID("$NetBSD: lfs.c,v 1.6 1999/11/05 18:59:12 perseant Exp $"); +__RCSID("$NetBSD: lfs.c,v 1.7 2000/01/18 00:02:29 perseant Exp $"); #endif #endif /* not lint */ #include +#define FSTYPENAMES #include #include #include @@ -228,12 +229,21 @@ make_lfs(fd, lp, partp, minfree, block_size, frag_size, seg_size) lfsp = &lfs_default; + /* If partition is not an LFS partition, warn that that is the case */ + if(partp->p_fstype != FS_BSDLFS) { + fatal("partition label indicated fs type \"%s\", expected \"%s\"", + fstypenames[partp->p_fstype], fstypenames[FS_BSDLFS]); + } + if (!(bsize = block_size)) - bsize = DFL_LFSBLOCK; + if (!(bsize = partp->p_fsize * partp->p_frag)) + bsize = DFL_LFSBLOCK; if (!(fsize = frag_size)) - fsize = DFL_LFSFRAG; + if (!(fsize = partp->p_frag)) + fsize = DFL_LFSFRAG; if (!(ssize = seg_size)) - ssize = DFL_LFSSEG; + if (!(ssize = (partp->p_fsize * partp->p_frag) << partp->p_sgs)) + ssize = DFL_LFSSEG; /* Sanity check: fsize<=bsize bsize) { @@ -242,8 +252,14 @@ make_lfs(fd, lp, partp, minfree, block_size, frag_size, seg_size) fatal("fragment size must be <= block size %d", bsize); fsize = bsize; } - if (bsize >= ssize) - fatal("block size must be < segment size"); + if (bsize >= ssize) { + /* Only fatal if ssize was explicitly set */ + if(seg_size) + fatal("block size must be < segment size"); + warnx("%s: disklabel segment size (%d) too small, using default (%d)", + progname, ssize, DFL_LFSSEG); + ssize = DFL_LFSSEG; + } tryagain: /* Modify parts of superblock overridden by command line arguments */ diff --git a/sbin/newfs_lfs/newfs_lfs.8 b/sbin/newfs_lfs/newfs_lfs.8 index eaaddeee3446..a7b72db1e118 100644 --- a/sbin/newfs_lfs/newfs_lfs.8 +++ b/sbin/newfs_lfs/newfs_lfs.8 @@ -1,4 +1,4 @@ -.\" $NetBSD: newfs_lfs.8,v 1.3 2000/01/16 00:44:59 hubertf Exp $ +.\" $NetBSD: newfs_lfs.8,v 1.4 2000/01/18 00:02:29 perseant Exp $ .\" .\" Copyright (c) 1993 .\" The Regents of the University of California. All rights reserved. @@ -56,11 +56,19 @@ the proper fstype is 4.4LFS.) The following options define the general layout policies. .Bl -tag -width Fl .It Fl B -The logical segment size of the file system in bytes. +The logical segment size of the file system in bytes. If not specified, +the segment size is computed by left-shifting the partition label's block +size by the amount indicated in the partition table's segshift. (A reasonable +value for the segshift field in the disklabel is 7, which gives 1M segments +for 8K blocks.) .It Fl b Ar block-size -The block size of the file system in bytes. +The block size of the file system in bytes. If not specified, the block +size is taken from the partition label, or if the partition label +indicates 0, a compile-time default of 8K is used. .It Fl f Ar fragment-size -The fragment size of the file system in bytes. +The fragment size of the file system in bytes. If not specified, +the fragment size is taken from the partition label, or if the partition +label indicates 0, a compile-time default of 1K is used. .It Fl L Create a log-structured file system (LFS). This is the default, and this option is provided for compatibility only.