git: HAMMER VFS - Fix deadlock during read-only HAMMER mount

Matthew Dillon dillon at crater.dragonflybsd.org
Tue Oct 5 11:52:35 PDT 2010


commit 6494bbf55217ae4f3167d3242590ee4136819602
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Tue Oct 5 09:36:42 2010 -0700

    HAMMER VFS - Fix deadlock during read-only HAMMER mount
    
    * HAMMER UNDOs are addressed using zone-1 (HAMMER_ZONE_RAW_VOLUME) and
      zone-2 (HAMMER_ZONE_RAW_BUFFER) data offsets.  Normal filesystem
      operations may use zone references which are incompatible with the UNDO
      data references.  That is, they may use a different zone accessing
      the same physical disk offset.
    
      Normally when the UNDO is run the modified buffers are flushed to disk
      and the buffers are destroyed before normal filesystem operations begin.
      Thus it isn't a problem for normal R+W mounts.
    
    * Read-only mounts are a different story.  The modified buffers from the
      undo are left in core memory (they cannot be flushed yet because the
      mount is read-only).  The incompatible zones cause the HAMMER buffer
      system to lose track of related locked buffer cache buffers and can lead
      to a deadlock.
    
    * Fix this by explicitly checking for a read-only mount and doing a
      secondary lookup using the RAW zone for certain selected zones.
    
    Reported-by: Matthias Schmidt <matthias at dragonflybsd.org>

Summary of changes:
 sys/vfs/hammer/hammer_ondisk.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/6494bbf55217ae4f3167d3242590ee4136819602


-- 
DragonFly BSD source repository





More information about the Commits mailing list