DragonFly-2.1.1.480.g1ce12d master sys/vfs/hammer hammer_blockmap.c

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Feb 1 00:39:00 PST 2009


commit 1ce12d35b1ca168256fa390c238fd75e231855db
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sat Jan 31 22:53:38 2009 -0800

    HAMMER VFS - Fix I/O invalidation collision assertion
    
    Fix more issues with the hammer_reserve subsystem.
    
    * Fix a broken base_offset calculation which had reversed the zone
      and offset fields in a HAMMER_ZONE_ENCODE() call.  The broken
      base_offset caused hammer_del_buffers() to scan the wrong offset
      range, leaving conflicting buffer cache buffers intact.
    
      The resulting conflict caused a KKASSERT(LIST_FIRST(&bp->b_dep) == NULL)
      to fail later on.
    
    * Hold a reference through a potentially blocking operation in
      hammer_blockmap_alloc().
    
    * Record the proper zone in a hammer_reserve() structure created via
      hammer_blockmap_free().  Without this the I/O invalidation code
      cannot locate conflicting hammer_buffer structures.
    
    * hammer_reserve_setdelay_offset() was not actually placing the
      hammer_reserve() structure in the delay queue, allowing it to
      be disposed of too early.

Summary of changes:
 sys/vfs/hammer/hammer_blockmap.c |   37 ++++++++++++++++++++++++++++---------
 1 files changed, 28 insertions(+), 9 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/1ce12d35b1ca168256fa390c238fd75e231855db


-- 
DragonFly BSD source repository





More information about the Commits mailing list