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