summaryrefslogtreecommitdiffstats
path: root/sbin/newfs/mkfs.c
diff options
context:
space:
mode:
authorwes <wes@FreeBSD.org>2005-01-21 22:20:25 +0000
committerwes <wes@FreeBSD.org>2005-01-21 22:20:25 +0000
commit926ee6068d8bd8c77c20eb932da7a6dc632937d0 (patch)
tree7fbfbe0303677bc55d5c8f4300d1d0ac2c58879f /sbin/newfs/mkfs.c
parentbb68fc2b6ee344a5c2eecf55c47280bcfd199d8f (diff)
downloadFreeBSD-src-926ee6068d8bd8c77c20eb932da7a6dc632937d0.zip
FreeBSD-src-926ee6068d8bd8c77c20eb932da7a6dc632937d0.tar.gz
Add an option to suppress the creation of the .snap directory in
the new filesystem. This is intended for memory and vnode filesystems that will never be fsck'ed or dumped. Obtained from: St. Bernard Software RAPID MFC after: 2 weeks
Diffstat (limited to 'sbin/newfs/mkfs.c')
-rw-r--r--sbin/newfs/mkfs.c68
1 files changed, 38 insertions, 30 deletions
diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c
index 66074c7..b796aef 100644
--- a/sbin/newfs/mkfs.c
+++ b/sbin/newfs/mkfs.c
@@ -738,10 +738,12 @@ fsinit(time_t utime)
{
union dinode node;
struct group *grp;
+ int entries;
memset(&node, 0, sizeof node);
if ((grp = getgrnam("operator")) == NULL)
errx(35, "Cannot retrieve operator gid");
+ entries = (nflag) ? ROOTLINKCNT - 1: ROOTLINKCNT;
if (sblock.fs_magic == FS_UFS1_MAGIC) {
/*
* initialize the node
@@ -753,27 +755,30 @@ fsinit(time_t utime)
* create the root directory
*/
node.dp1.di_mode = IFDIR | UMASK;
- node.dp1.di_nlink = ROOTLINKCNT;
- node.dp1.di_size = makedir(root_dir, ROOTLINKCNT);
+ node.dp1.di_nlink = entries;
+ node.dp1.di_size = makedir(root_dir, entries);
node.dp1.di_db[0] = alloc(sblock.fs_fsize, node.dp1.di_mode);
node.dp1.di_blocks =
btodb(fragroundup(&sblock, node.dp1.di_size));
wtfs(fsbtodb(&sblock, node.dp1.di_db[0]), sblock.fs_fsize,
iobuf);
iput(&node, ROOTINO);
- /*
- * create the .snap directory
- */
- node.dp1.di_mode |= 020;
- node.dp1.di_gid = grp->gr_gid;
- node.dp1.di_nlink = SNAPLINKCNT;
- node.dp1.di_size = makedir(snap_dir, SNAPLINKCNT);
- node.dp1.di_db[0] = alloc(sblock.fs_fsize, node.dp1.di_mode);
- node.dp1.di_blocks =
- btodb(fragroundup(&sblock, node.dp1.di_size));
- wtfs(fsbtodb(&sblock, node.dp1.di_db[0]), sblock.fs_fsize,
- iobuf);
- iput(&node, ROOTINO + 1);
+ if (!nflag) {
+ /*
+ * create the .snap directory
+ */
+ node.dp1.di_mode |= 020;
+ node.dp1.di_gid = grp->gr_gid;
+ node.dp1.di_nlink = SNAPLINKCNT;
+ node.dp1.di_size = makedir(snap_dir, SNAPLINKCNT);
+ node.dp1.di_db[0] =
+ alloc(sblock.fs_fsize, node.dp1.di_mode);
+ node.dp1.di_blocks =
+ btodb(fragroundup(&sblock, node.dp1.di_size));
+ wtfs(fsbtodb(&sblock, node.dp1.di_db[0]),
+ sblock.fs_fsize, iobuf);
+ iput(&node, ROOTINO + 1);
+ }
} else {
/*
* initialize the node
@@ -786,27 +791,30 @@ fsinit(time_t utime)
* create the root directory
*/
node.dp2.di_mode = IFDIR | UMASK;
- node.dp2.di_nlink = ROOTLINKCNT;
- node.dp2.di_size = makedir(root_dir, ROOTLINKCNT);
+ node.dp2.di_nlink = entries;
+ node.dp2.di_size = makedir(root_dir, entries);
node.dp2.di_db[0] = alloc(sblock.fs_fsize, node.dp2.di_mode);
node.dp2.di_blocks =
btodb(fragroundup(&sblock, node.dp2.di_size));
wtfs(fsbtodb(&sblock, node.dp2.di_db[0]), sblock.fs_fsize,
iobuf);
iput(&node, ROOTINO);
- /*
- * create the .snap directory
- */
- node.dp2.di_mode |= 020;
- node.dp2.di_gid = grp->gr_gid;
- node.dp2.di_nlink = SNAPLINKCNT;
- node.dp2.di_size = makedir(snap_dir, SNAPLINKCNT);
- node.dp2.di_db[0] = alloc(sblock.fs_fsize, node.dp2.di_mode);
- node.dp2.di_blocks =
- btodb(fragroundup(&sblock, node.dp2.di_size));
- wtfs(fsbtodb(&sblock, node.dp2.di_db[0]), sblock.fs_fsize,
- iobuf);
- iput(&node, ROOTINO + 1);
+ if (!nflag) {
+ /*
+ * create the .snap directory
+ */
+ node.dp2.di_mode |= 020;
+ node.dp2.di_gid = grp->gr_gid;
+ node.dp2.di_nlink = SNAPLINKCNT;
+ node.dp2.di_size = makedir(snap_dir, SNAPLINKCNT);
+ node.dp2.di_db[0] =
+ alloc(sblock.fs_fsize, node.dp2.di_mode);
+ node.dp2.di_blocks =
+ btodb(fragroundup(&sblock, node.dp2.di_size));
+ wtfs(fsbtodb(&sblock, node.dp2.di_db[0]),
+ sblock.fs_fsize, iobuf);
+ iput(&node, ROOTINO + 1);
+ }
}
}
OpenPOWER on IntegriCloud