HAMMER 61F/Many: Stabilization
authorMatthew Dillon <dillon@dragonflybsd.org>
Sat, 12 Jul 2008 23:47:13 +0000 (23:47 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Sat, 12 Jul 2008 23:47:13 +0000 (23:47 +0000)
* Fix a bug triggered by rm -rf where HAMMER was failling to wait for
  reclaimed inodes to drain, allowing a build-up that would result in
  a kmalloc() pool-full panic.

  Add a required call to hammer_inode_waitreclaims() in the dounlink
  code.  Because this code acquires and releases inodes without having
  to mess around with related vnodes, it bypassed the reclaim checks in
  the vnode path.

Reported-by: Michael Neumann <mneumann@ntecs.de>
sys/vfs/hammer/hammer_vnops.c

index 073627a..d6c5839 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/vfs/hammer/hammer_vnops.c,v 1.88 2008/07/12 23:04:50 dillon Exp $
+ * $DragonFly: src/sys/vfs/hammer/hammer_vnops.c,v 1.89 2008/07/12 23:47:13 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -2683,6 +2683,7 @@ retry:
        } else {
                hammer_done_cursor(&cursor);
        }
+       hammer_inode_waitreclaims(ip->hmp);
        if (error == EDEADLK)
                goto retry;