HAMMER VFS - Fix deadlock during read-only HAMMER mount
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 5 Oct 2010 16:36:42 +0000 (09:36 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 5 Oct 2010 16:36:42 +0000 (09:36 -0700)
commit6494bbf55217ae4f3167d3242590ee4136819602
tree1775da0fd9af94adf0426c9eec1248705e89e431
parent0b684e3f9af3abc5ded676c43a1a5a478b45325c
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@dragonflybsd.org>
sys/vfs/hammer/hammer_ondisk.c