:No panic with this patch.
:
:Upon closer inspection, the other calls to buf_deallocate() (in
:brelse() and getnewbuf()) are done if and only if b_dep is not empty.
:So a better patch would be:
:
:Index: src2/sys/kern/vfs_bio.c
:===================================================================
:--- src2.orig/sys/kern/vfs_bio.c       2008-01-20 19:27:54.000000000 +0100
:+++ src2/sys/kern/vfs_bio.c    2008-01-22 17:58:05.000000000 +0100
:@@ -1085,7 +1085,8 @@
:       if (bp->b_flags & (B_DELWRI | B_LOCKED)) {
:               bp->b_flags &= ~B_RELBUF;
:       } else if (vm_page_count_severe()) {
:-              buf_deallocate(bp);
:+              if (LIST_FIRST(&bp->b_dep) != NULL)
:+                      buf_deallocate(bp);
:               if (bp->b_flags & (B_DELWRI | B_LOCKED))
:                       bp->b_flags &= ~B_RELBUF;
:               else
:
:If there are no objections, I'll commit this on sunday.

    You found it.  I must have muffed it up when I made the changes
    to support HAMMER's more sophisticated use of the bioops.

                                        -Matt
                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>

Reply via email to