HAMMER 40F/Many: Inode/link-count sequencer cleanup pass, UNDO cache.
commite8599db1ae18c0997db98e0ae59d5bd26d01a53c
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 3 May 2008 20:21:20 +0000 (3 20:21 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 3 May 2008 20:21:20 +0000 (3 20:21 +0000)
treefe5c7ba74883415523915d4e93f31d12cc3c5422
parent3bf2d80af5516e1e71cb4cae3c73b5d3a39cceaf
HAMMER 40F/Many: Inode/link-count sequencer cleanup pass, UNDO cache.

* Implement an UNDO cache.  If we have already laid down an UNDO in the
  current flush cycle we do not have to lay down another one for the same
  address.  This greatly reduces the number of UNDOs we generate during
  a flush.

* Properly get the vnode in order to be able to issue vfsync()'s from the
  backend.  We may also have to acquire the vnode when doing an unload
  check for a file deletion.

* Properly generate UNDO records for the volume header.  During crash recovery
  we have to UNDO the volume header along with any partially written
  meta-data, because the volume header refers to the meta-data.

* Add another record type, GENERAL, representing inode or softlink records.

* Move the setting of HAMMER_INODE_WRITE_ALT to the backend, allowing
  the kernel to flush buffers up to the point where the backend syncs
  the inode.
sys/vfs/hammer/hammer.h
sys/vfs/hammer/hammer_btree.c
sys/vfs/hammer/hammer_flusher.c
sys/vfs/hammer/hammer_freemap.c
sys/vfs/hammer/hammer_inode.c
sys/vfs/hammer/hammer_object.c
sys/vfs/hammer/hammer_reblock.c
sys/vfs/hammer/hammer_undo.c
sys/vfs/hammer/hammer_vfsops.c
sys/vfs/hammer/hammer_vnops.c