brelse() was improperly clearing B_DELWRI in the B_DELWRI|B_INVAL case
without removing the buffer from the vnode's dirty buffer list, which can result in a panic in NFS. Replaced the code with a call to bundirty() which deals with it properly. PR: kern/36108, kern/36174 Submitted by: various people Special mention: to Danny Schales <dan@coes.LaTech.edu> for providing a core dump that helped me track this down. MFC after: 1 day
This commit is contained in:
parent
aad01d8119
commit
9a85737b15
@ -1338,11 +1338,8 @@ brelse(struct buf * bp)
|
||||
* If B_INVAL, clear B_DELWRI. We've already placed the buffer
|
||||
* on the correct queue.
|
||||
*/
|
||||
if ((bp->b_flags & (B_INVAL|B_DELWRI)) == (B_INVAL|B_DELWRI)) {
|
||||
bp->b_flags &= ~B_DELWRI;
|
||||
--numdirtybuffers;
|
||||
numdirtywakeup(lodirtybuffers);
|
||||
}
|
||||
if ((bp->b_flags & (B_INVAL|B_DELWRI)) == (B_INVAL|B_DELWRI))
|
||||
bundirty(bp);
|
||||
|
||||
/*
|
||||
* Fixup numfreebuffers count. The bp is on an appropriate queue
|
||||
|
Loading…
x
Reference in New Issue
Block a user