git: hammer2 - freemap part 4, misc fixes

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jun 13 00:19:04 PDT 2013


commit 93f3933ac3e2ad37a7ba775663c711b13588f147
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Jun 13 00:11:04 2013 -0700

    hammer2 - freemap part 4, misc fixes
    
    * Revamp the freemap a bit.  Remove Layer 0.  Layer 1 is now the LEAF.
      2GB of media storage is now represented by a single 64KB Layer 1 block.
      Synchronize the FREEMAP document with the current thinking.
    
      The Layer 1 block contains 1024x64 entries.  Each entry represents 2MBytes
      of media storage.  These entries are no longer blockrefs pointing to
      Layer 0 but are instead terminal structures.
    
    * Each entry represents a 16KB allocation granularity in 2 bits and has
      128 bit pairs (256 bits total), plus additional information to represent
      the 2MBytes of storage.
    
      Fine-grained allocations are supported via an iterator field, currently
      allowing fine-grained allocations down to 1KB and potentially expandable
      in the future to even smaller allocation sizes.
    
    * Fix a SMP race in voldata handling during flush.  The freemap portion of
      voldata could be updated during crc calculations due to hmp->fchain not
      being held locked, causing random volume header/backups to fail their CRC
      test on remount.
    
    * Add missing BUF_KERNPROC() when chain->bp is replaced.  Fixes a kernel
      lock ownership assertion.
    
    * Add freezone/radix fields to the inode_data structure.  Each inode can
      accomodate four fields.  The fields are not yet utilized.  Current thinking
      is to use them to optimize the bulk free-scan for freeing blocks.

Summary of changes:
 sbin/hammer2/cmd_debug.c          |  36 ++-
 sbin/hammer2/cmd_stat.c           |   2 +-
 sys/vfs/hammer2/FREEMAP           | 198 ++++++++----
 sys/vfs/hammer2/hammer2_chain.c   |  17 +-
 sys/vfs/hammer2/hammer2_disk.h    | 146 +++++----
 sys/vfs/hammer2/hammer2_flush.c   |  45 ++-
 sys/vfs/hammer2/hammer2_freemap.c | 629 +++++++++++++++++---------------------
 sys/vfs/hammer2/hammer2_subr.c    |   8 +-
 8 files changed, 581 insertions(+), 500 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/93f3933ac3e2ad37a7ba775663c711b13588f147


-- 
DragonFly BSD source repository



More information about the Commits mailing list