git: usr.sbin/makefs: Add HAMMER2 support
Tomohiro Kusumi
tkusumi at crater.dragonflybsd.org
Sat Jun 4 05:51:19 PDT 2022
commit 2d60b848f2503f28d840ceae174d07eb149ccce9
Author: Tomohiro Kusumi <tkusumi at netbsd.org>
Date: Sat Jun 4 20:54:35 2022 +0900
usr.sbin/makefs: Add HAMMER2 support
This commit adds HAMMER2 image creation support for makefs(8).
It runs newfs_hammer2(8) and then sys/vfs/hammer2 logic in userspace
to create HAMMER2 image from a given directory.
This commit splits newfs_hammer2(8) into newfs and mkfs part simlarly
to newfs_msdos(8), so that makefs(8) can use newfs functionality.
The entire sys/vfs/hammer2 (with exception of unneeded
hammer2_{bulkfree,ccms,iocom,ioctl,msgops,synchro}.[hc] and reusable
hammer2_disk.h) is copied to usr.sbin/makefs with below modification.
It intends to have minimum amount of diff against sys/vfs/hammer2.
* Header includes are modified so that it compiles in userspace.
* VFS and other kernel functions are usually implemented as simple
stub functions in hammer2_compat.h and hammer2_buf.c, but some are
commented out.
* Kernel functions such as kprintf, kmalloc, kprintf, kstrdup, etc
are implemented using corresponding libc functions.
* Lock primitives are basically NOP, and they (should) never block
as makefs(8) is a single thread program.
* struct vnode and struct buf (the ones defined locally in makefs(8),
not sys/sys/*) have new struct members only used by HAMMER2 to
emulate VFS behavior required by HAMMER2.
* Since makefs(8) is write-only, VOP_{NRESOLVE,NCREATE,NMKDIR,NLINK,
NSYMLINK,WRITE,STRATEGY} are implemented, but other VOPs just
return EOPNOTSUPP.
* VOP_{INACTIVE,RECLAIM} may be implemented and used in future to
better emulate VFS behavior to address current limitation.
* VOP_WRITE is modified to directly call VOP_STRATEGY function.
* The XOP kernel thread is modified to act as a regular function
called from VOPs, along with simplified admin code.
It currently has following limitations.
* multi-volumes is unsupported, simply due to makefs(8) only taking 1
image file path.
* Not necessarily a limitation, but it only supports populating 1 PFS,
which is "DATA" by default. Other PFSes if any won't have anything
under the root PFS inode.
* makefs(8) process gets killed by OOM for a directory with *extremely*
large number of files, depending on available memory. This is due to
the way it currently tries to flush all chains in a single VFS_SYNC.
Supporting multiple VFS_SYNC calls by checking available memory along
the way gives chance to free unused vnodes/inodes and chains. This
may be implemented in future. This limitation is specific to HAMMER2,
as all other makefs(8) filesystems are not CoW, meaning they allow
in-place write based objects creation from a top directory to bottom
whereas HAMMER2 flushes chains in bottom-up direction.
Summary of changes:
sbin/newfs_hammer2/Makefile | 2 +-
.../{newfs_hammer2.c => mkfs_hammer2.c} | 508 +-
sbin/newfs_hammer2/mkfs_hammer2.h | 77 +
sbin/newfs_hammer2/newfs_hammer2.c | 784 +--
usr.sbin/makefs/Makefile | 5 +-
usr.sbin/makefs/ffs/buf.c | 52 +-
usr.sbin/makefs/ffs/buf.h | 15 +
usr.sbin/makefs/hammer2.c | 824 +++
usr.sbin/makefs/hammer2.h | 48 +
usr.sbin/makefs/hammer2/Makefile.inc | 22 +
usr.sbin/makefs/hammer2/hammer2.h | 2091 +++++++
usr.sbin/makefs/hammer2/hammer2_admin.c | 1248 ++++
usr.sbin/makefs/hammer2/hammer2_buf.c | 177 +
usr.sbin/makefs/hammer2/hammer2_chain.c | 6143 ++++++++++++++++++++
usr.sbin/makefs/hammer2/hammer2_cluster.c | 760 +++
usr.sbin/makefs/hammer2/hammer2_compat.h | 929 +++
usr.sbin/makefs/hammer2/hammer2_flush.c | 1550 +++++
usr.sbin/makefs/hammer2/hammer2_freemap.c | 1284 ++++
usr.sbin/makefs/hammer2/hammer2_inode.c | 1864 ++++++
usr.sbin/makefs/hammer2/hammer2_io.c | 918 +++
usr.sbin/makefs/hammer2/hammer2_lz4.c | 527 ++
{sys/vfs => usr.sbin/makefs}/hammer2/hammer2_lz4.h | 0
.../makefs}/hammer2/hammer2_lz4_encoder.h | 0
usr.sbin/makefs/hammer2/hammer2_ondisk.c | 703 +++
usr.sbin/makefs/hammer2/hammer2_strategy.c | 1610 +++++
usr.sbin/makefs/hammer2/hammer2_subr.c | 482 ++
usr.sbin/makefs/hammer2/hammer2_vfsops.c | 3139 ++++++++++
usr.sbin/makefs/hammer2/hammer2_vnops.c | 2871 +++++++++
usr.sbin/makefs/hammer2/hammer2_xops.c | 1636 ++++++
.../makefs}/hammer2/zlib/hammer2_zlib.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_adler32.c | 0
.../makefs/hammer2/zlib/hammer2_zlib_deflate.c | 1210 ++++
.../makefs}/hammer2/zlib/hammer2_zlib_deflate.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_inffast.c | 0
.../makefs}/hammer2/zlib/hammer2_zlib_inffast.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_inffixed.h | 0
.../makefs/hammer2/zlib/hammer2_zlib_inflate.c | 1052 ++++
.../makefs}/hammer2/zlib/hammer2_zlib_inflate.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_inftrees.c | 0
.../makefs}/hammer2/zlib/hammer2_zlib_inftrees.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_trees.c | 0
.../makefs}/hammer2/zlib/hammer2_zlib_trees.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_zconf.h | 0
.../makefs}/hammer2/zlib/hammer2_zlib_zutil.c | 0
.../makefs}/hammer2/zlib/hammer2_zlib_zutil.h | 0
usr.sbin/makefs/makefs.8 | 58 +-
usr.sbin/makefs/makefs.c | 1 +
usr.sbin/makefs/makefs.h | 1 +
48 files changed, 31546 insertions(+), 1045 deletions(-)
copy sbin/newfs_hammer2/{newfs_hammer2.c => mkfs_hammer2.c} (80%)
create mode 100644 sbin/newfs_hammer2/mkfs_hammer2.h
create mode 100644 usr.sbin/makefs/hammer2.c
create mode 100644 usr.sbin/makefs/hammer2.h
create mode 100644 usr.sbin/makefs/hammer2/Makefile.inc
create mode 100644 usr.sbin/makefs/hammer2/hammer2.h
create mode 100644 usr.sbin/makefs/hammer2/hammer2_admin.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_buf.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_chain.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_cluster.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_compat.h
create mode 100644 usr.sbin/makefs/hammer2/hammer2_flush.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_freemap.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_inode.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_io.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_lz4.c
copy {sys/vfs => usr.sbin/makefs}/hammer2/hammer2_lz4.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/hammer2_lz4_encoder.h (100%)
create mode 100644 usr.sbin/makefs/hammer2/hammer2_ondisk.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_strategy.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_subr.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_vfsops.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_vnops.c
create mode 100644 usr.sbin/makefs/hammer2/hammer2_xops.c
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_adler32.c (100%)
create mode 100644 usr.sbin/makefs/hammer2/zlib/hammer2_zlib_deflate.c
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_deflate.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_inffast.c (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_inffast.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_inffixed.h (100%)
create mode 100644 usr.sbin/makefs/hammer2/zlib/hammer2_zlib_inflate.c
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_inflate.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_inftrees.c (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_inftrees.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_trees.c (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_trees.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_zconf.h (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_zutil.c (100%)
copy {sys/vfs => usr.sbin/makefs}/hammer2/zlib/hammer2_zlib_zutil.h (100%)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/2d60b848f2503f28d840ceae174d07eb149ccce9
--
DragonFly BSD source repository
More information about the Commits
mailing list