disklabel now understands the p_sgs partition field (shift to compute
segment size from block size). newfs_lfs now reads the disklabel to find segment, block, and fragment sizes. Because reading this info from the wrong fs type could result in very poor fs layout (e.g. ffs has "16" where the segshift would go, resulting in 512-*megabyte* segments for 8K blocks), newfs_lfs refuses to create a filesystem on a partition not labeled "4.4LFS". Man pages for newfs_lfs updated to reflect this change.
This commit is contained in:
parent
7d3068a3b4
commit
f1dfdc6927
|
@ -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)
|
||||
|
|
|
@ -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 <sys/param.h>
|
||||
#define FSTYPENAMES
|
||||
#include <sys/disklabel.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/mount.h>
|
||||
|
@ -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<ssize */
|
||||
if (fsize > 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 */
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue