More locked_queue_* and lfs_avail accounting fixes from Jesse Off
<joff@gci-net.com>. Remove a specious btodb() in lfs_fragextend, and count blocks shrunk or removed by VOP_TRUNCATE in lfs_avail.
This commit is contained in:
parent
f595d8e741
commit
c398987151
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lfs_balloc.c,v 1.26 2000/11/17 19:14:41 perseant Exp $ */
|
||||
/* $NetBSD: lfs_balloc.c,v 1.27 2000/11/21 00:00:31 perseant Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
|
||||
|
@ -413,7 +413,7 @@ lfs_fragextend(vp, osize, nsize, lbn, bpp)
|
|||
|
||||
/* Adjust locked-list accounting */
|
||||
if (((*bpp)->b_flags & (B_LOCKED | B_CALL)) == B_LOCKED)
|
||||
locked_queue_bytes += btodb((*bpp)->b_bufsize - obufsize);
|
||||
locked_queue_bytes += (*bpp)->b_bufsize - obufsize;
|
||||
|
||||
bzero((char *)((*bpp)->b_data) + osize, (u_int)(nsize - osize));
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: lfs_inode.c,v 1.46 2000/11/17 19:14:41 perseant Exp $ */
|
||||
/* $NetBSD: lfs_inode.c,v 1.47 2000/11/21 00:00:31 perseant Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
|
||||
|
@ -229,6 +229,7 @@ lfs_truncate(v)
|
|||
off_t osize;
|
||||
long lastseg;
|
||||
size_t bc;
|
||||
int obufsize, odb;
|
||||
|
||||
if (length < 0)
|
||||
return (EINVAL);
|
||||
|
@ -332,6 +333,8 @@ lfs_truncate(v)
|
|||
lfs_reserve(fs, ovp, -fsbtodb(fs, 2 * NIADDR + 3));
|
||||
return (error);
|
||||
}
|
||||
obufsize = bp->b_bufsize;
|
||||
odb = btodb(bp->b_bcount);
|
||||
oip->i_ffs_size = length;
|
||||
size = blksize(fs, oip, lbn);
|
||||
(void) uvm_vnp_uncache(ovp);
|
||||
|
@ -339,6 +342,11 @@ lfs_truncate(v)
|
|||
memset((char *)bp->b_data + offset, 0,
|
||||
(u_int)(size - offset));
|
||||
allocbuf(bp, size);
|
||||
if (bp->b_flags & B_DELWRI) {
|
||||
if ((bp->b_flags & (B_LOCKED | B_CALL)) == B_LOCKED)
|
||||
locked_queue_bytes -= obufsize - bp->b_bufsize;
|
||||
fs->lfs_avail += odb - btodb(size);
|
||||
}
|
||||
(void) VOP_BWRITE(bp);
|
||||
}
|
||||
uvm_vnp_setsize(ovp, length);
|
||||
|
@ -644,6 +652,11 @@ lfs_indirtrunc(struct inode *ip, ufs_daddr_t lbn, daddr_t dbn,
|
|||
if (copy != NULL) {
|
||||
FREE(copy, M_TEMP);
|
||||
} else {
|
||||
if (bp->b_flags & B_DELWRI) {
|
||||
LFS_UNLOCK_BUF(bp);
|
||||
fs->lfs_avail += btodb(bp->b_bcount);
|
||||
wakeup(&fs->lfs_avail);
|
||||
}
|
||||
bp->b_flags |= B_INVAL;
|
||||
brelse(bp);
|
||||
}
|
||||
|
@ -689,6 +702,7 @@ restart:
|
|||
if (bp->b_flags & B_DELWRI) {
|
||||
bp->b_flags &= ~B_DELWRI;
|
||||
fs->lfs_avail += btodb(bp->b_bcount);
|
||||
wakeup(&fs->lfs_avail);
|
||||
}
|
||||
LFS_UNLOCK_BUF(bp);
|
||||
brelse(bp);
|
||||
|
@ -712,6 +726,7 @@ restart:
|
|||
if (bp->b_flags & B_DELWRI) {
|
||||
bp->b_flags &= ~B_DELWRI;
|
||||
fs->lfs_avail += btodb(bp->b_bcount);
|
||||
wakeup(&fs->lfs_avail);
|
||||
}
|
||||
LFS_UNLOCK_BUF(bp);
|
||||
brelse(bp);
|
||||
|
|
Loading…
Reference in New Issue