SCCS-vsn: sys/ufs/lfs/lfs_inode.c 7.82
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)lfs_inode.c 7.81 (Berkeley) %G%
+ * @(#)lfs_inode.c 7.82 (Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
struct proc *a_p;
} */ *ap;
{
struct proc *a_p;
} */ *ap;
{
+ register struct indir *inp;
register int i;
register daddr_t *daddrp;
register struct vnode *vp = ap->a_vp;
register int i;
register daddr_t *daddrp;
register struct vnode *vp = ap->a_vp;
struct ifile *ifp;
struct inode *ip;
struct lfs *fs;
struct ifile *ifp;
struct inode *ip;
struct lfs *fs;
- INDIR a[NIADDR + 2], a_end[NIADDR + 2];
+ struct indir a[NIADDR + 2], a_end[NIADDR + 2];
SEGUSE *sup;
daddr_t daddr, lastblock, lbn, olastblock;
long off, a_released, blocksreleased, i_released;
SEGUSE *sup;
daddr_t daddr, lastblock, lbn, olastblock;
long off, a_released, blocksreleased, i_released;
lastseg = -1;
for (lbn = olastblock; lbn >= lastblock;) {
lastseg = -1;
for (lbn = olastblock; lbn >= lastblock;) {
- lfs_bmaparray(vp, lbn, &daddr, a, &depth);
+ /* XXX use run length from bmap array to make this faster */
+ ufs_bmaparray(vp, lbn, &daddr, a, &depth, NULL);
if (lbn == olastblock)
for (i = NIADDR + 2; i--;)
a_end[i] = a[i];
if (lbn == olastblock)
for (i = NIADDR + 2; i--;)
a_end[i] = a[i];
break;
#ifdef DIAGNOSTIC
case 1: /* An indirect block. */
break;
#ifdef DIAGNOSTIC
case 1: /* An indirect block. */
- panic("lfs_truncate: lfs_bmaparray returned depth 1");
+ panic("lfs_truncate: ufs_bmaparray returned depth 1");
/* NOTREACHED */
#endif
default: /* Chain of indirect blocks. */
/* NOTREACHED */
#endif
default: /* Chain of indirect blocks. */
*/
a_released = 0;
i_released = 0;
*/
a_released = 0;
i_released = 0;
- for (bp = vp->v_dirtyblkhd; bp; bp = bp->b_blockf)
+ for (bp = vp->v_dirtyblkhd.le_next; bp; bp = bp->b_vnbufs.qe_next)
if (bp->b_flags & B_LOCKED) {
++a_released;
/*
if (bp->b_flags & B_LOCKED) {
++a_released;
/*
" blocks left on inode");
#endif
fs->lfs_avail += fsbtodb(fs, a_released);
" blocks left on inode");
#endif
fs->lfs_avail += fsbtodb(fs, a_released);
- e1 = vinvalbuf(vp, length > 0, ap->a_cred, ap->a_p);
+ e1 = vinvalbuf(vp, (length > 0) ? V_SAVE : 0, ap->a_cred, ap->a_p);
e2 = VOP_UPDATE(vp, &tv, &tv, 0);
return (e1 ? e1 : e2 ? e2 : 0);
}
e2 = VOP_UPDATE(vp, &tv, &tv, 0);
return (e1 ? e1 : e2 ? e2 : 0);
}