git: hammer2 - refactor filesystem sync 4/N
dillon at crater.dragonflybsd.org
Wed Dec 5 14:29:27 PST 2018
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Nov 13 13:32:33 2018 -0800
hammer2 - refactor filesystem sync 4/N
* Save synchronized iroot blockmaps for snapshot code, and use them
in the snapshot code.
* Improve dependency handling and syncq/sideq flagging for
dependencies. Also improve the hammer2_inode_t reordering
code that allows the frontend to continue operating on dirty
inodes simultaneous with a filesystem sync.
* Move inode deletion into the filesystem sync code (in addition to
creation), for the same reason.
* Fix lost ref counts in the snapshot code which were causing umount
* Stabilization pass on volume flush code. Since flushes stop at
inode boundaries, we must properly flush the superroot before
flushing the volume header. That is, the flush sequence is:
- flush inodes for PFS (flushes inode content)
- flush PFS root inode (flushes through to inodes)
- flush superroot inode (flushes through to PFS root)
- flush volume header (flushes voulume header to superroot)
Theoretically this allows the filesystem asynchronously write data
and inodes flushed by the kernel's buffer cache and vnode code
concurrent with a filesystem flush without messing up filesystem
consistency, because these asynchronously flushed inodes are not
included (or have already been flushed) in the filesystem flush that
is already underway.
* Filesystem consistency still not perfect (using snapshot-debug
directive to test during heavy filesystem modification loads,
directory entries are sometimes desynchronized from their inodes).
Summary of changes:
sys/vfs/hammer2/hammer2.h | 6 +-
sys/vfs/hammer2/hammer2_flush.c | 60 +++++--
sys/vfs/hammer2/hammer2_inode.c | 197 ++++++++-------------
sys/vfs/hammer2/hammer2_ioctl.c | 18 +-
sys/vfs/hammer2/hammer2_vfsops.c | 358 ++++++++++++++++++++++++---------------
sys/vfs/hammer2/hammer2_vnops.c | 30 ++--
6 files changed, 368 insertions(+), 301 deletions(-)
DragonFly BSD source repository
More information about the Commits