HAMMER 31C/many: Fix livelock in deadlock handling code
authorMatthew Dillon <dillon@dragonflybsd.org>
Sun, 24 Feb 2008 23:40:24 +0000 (23:40 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sun, 24 Feb 2008 23:40:24 +0000 (23:40 +0000)
commit1ff9f58eda654e22072ce20773e4744822b5e353
tree6f871a2abdf77b3e20514d79dc56e6b84301e8c2
parentb3c3feedf21a0248b72da74e21eab1aa49604ba8
HAMMER 31C/many: Fix livelock in deadlock handling code

* The wrong B-Tree node was being recorded in cursor->deadlk_node in
  one of the B-Tree subroutines.  Deadlocks are handled by acquiring
  and releasing the recorded conflicting node after releasing all other
  locks, and then retrying.  Recording the wrong node caused the
  handling routine to not block waiting for the deadlock to resolve
  and resulted in a livelock.

Reported-by: YONETANI Tomokazu <qhwt+dfly@les.ath.cx>
sys/vfs/hammer/hammer_btree.c