diff options
Diffstat (limited to 'contrib/sys/softupdates/ffs_softdep.c')
| -rw-r--r-- | contrib/sys/softupdates/ffs_softdep.c | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/contrib/sys/softupdates/ffs_softdep.c b/contrib/sys/softupdates/ffs_softdep.c index 433cafe5faf50..c4a2cd80702f5 100644 --- a/contrib/sys/softupdates/ffs_softdep.c +++ b/contrib/sys/softupdates/ffs_softdep.c @@ -54,7 +54,7 @@ * SUCH DAMAGE. * * from: @(#)ffs_softdep.c 9.28 (McKusick) 8/8/98 - * $Id: ffs_softdep.c,v 1.19 1999/01/06 18:18:04 bde Exp $ + * $Id: ffs_softdep.c,v 1.14 1998/09/24 15:02:46 luoqi Exp $ */ /* @@ -982,7 +982,7 @@ softdep_mount(devvp, mp, fs, cred) } #ifdef DEBUG if (!bcmp(&cstotal, &fs->fs_cstotal, sizeof cstotal)) - printf("ffs_mountfs: superblock updated for soft updates\n"); + printf("ffs_mountfs: superblock updated\n"); #endif bcopy(&cstotal, &fs->fs_cstotal, sizeof cstotal); return (0); @@ -1261,7 +1261,7 @@ allocdirect_merge(adphead, newadp, oldadp) if (newadp->ad_oldblkno != oldadp->ad_newblkno || newadp->ad_oldsize != oldadp->ad_newsize || newadp->ad_lbn >= NDADDR) - panic("allocdirect_check: old %d != new %d || lbn %ld >= %d", + panic("allocdirect_check: old %d != new %d || lbn %d >= %d", newadp->ad_oldblkno, oldadp->ad_newblkno, newadp->ad_lbn, NDADDR); newadp->ad_oldblkno = oldadp->ad_oldblkno; @@ -1664,8 +1664,8 @@ softdep_setup_freeblocks(ip, length) tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 1, "sdsetf", 0); ACQUIRE_LOCK_INTERLOCKED(&lk); } - while (getdirtybuf(&TAILQ_FIRST(&vp->v_dirtyblkhd), MNT_WAIT)) { - bp = TAILQ_FIRST(&vp->v_dirtyblkhd); + while (getdirtybuf(&LIST_FIRST(&vp->v_dirtyblkhd), MNT_WAIT)) { + bp = LIST_FIRST(&vp->v_dirtyblkhd); (void) inodedep_lookup(fs, ip->i_number, 0, &inodedep); deallocate_dependencies(bp, inodedep); bp->b_flags |= B_INVAL | B_NOCACHE; @@ -2827,12 +2827,12 @@ initiate_write_inodeblock(inodedep, bp) prevlbn = adp->ad_lbn; if (adp->ad_lbn < NDADDR && dp->di_db[adp->ad_lbn] != adp->ad_newblkno) - panic("%s: direct pointer #%ld mismatch %d != %d", + panic("%s: direct pointer #%d mismatch %d != %d", "softdep_write_inodeblock", adp->ad_lbn, dp->di_db[adp->ad_lbn], adp->ad_newblkno); if (adp->ad_lbn >= NDADDR && dp->di_ib[adp->ad_lbn - NDADDR] != adp->ad_newblkno) - panic("%s: indirect pointer #%ld mismatch %d != %d", + panic("%s: indirect pointer #%d mismatch %d != %d", "softdep_write_inodeblock", adp->ad_lbn - NDADDR, dp->di_ib[adp->ad_lbn - NDADDR], adp->ad_newblkno); deplist |= 1 << adp->ad_lbn; @@ -3137,9 +3137,11 @@ handle_written_inodeblock(inodedep, bp) struct inodedep *inodedep; struct buf *bp; /* buffer containing the inode block */ { + struct pagedep *pagedep; struct worklist *wk, *filefree; struct allocdirect *adp, *nextadp; struct dinode *dp; + struct diradd *dap; int hadchanges; if ((inodedep->id_state & IOSTARTED) == 0) @@ -3173,14 +3175,14 @@ handle_written_inodeblock(inodedep, bp) panic("handle_written_inodeblock: new entry"); if (adp->ad_lbn < NDADDR) { if (dp->di_db[adp->ad_lbn] != adp->ad_oldblkno) - panic("%s: %s #%ld mismatch %d != %d", + panic("%s: %s #%d mismatch %d != %d", "handle_written_inodeblock", "direct pointer", adp->ad_lbn, dp->di_db[adp->ad_lbn], adp->ad_oldblkno); dp->di_db[adp->ad_lbn] = adp->ad_newblkno; } else { if (dp->di_ib[adp->ad_lbn - NDADDR] != 0) - panic("%s: %s #%ld allocated as %d", + panic("%s: %s #%d allocated as %d", "handle_written_inodeblock", "indirect pointer", adp->ad_lbn - NDADDR, dp->di_ib[adp->ad_lbn - NDADDR]); @@ -3430,6 +3432,7 @@ softdep_load_inodeblock(ip) struct inode *ip; /* the "in_core" copy of the inode */ { struct inodedep *inodedep; + int error, gotit; /* * Check for alternate nlink count. @@ -3463,7 +3466,7 @@ void softdep_update_inodeblock(ip, bp, waitfor) struct inode *ip; /* the "in_core" copy of the inode */ struct buf *bp; /* the buffer containing the inode block */ - int waitfor; /* nonzero => update must be allowed */ + int waitfor; /* 1 => update must be allowed */ { struct inodedep *inodedep; struct worklist *wk; @@ -3583,9 +3586,7 @@ softdep_fsync(vp) struct fs *fs; struct proc *p = CURPROC; /* XXX */ int error, ret, flushparent; -#ifndef __FreeBSD__ struct timeval tv; -#endif ino_t parentino; ufs_lbn_t lbn; @@ -3652,13 +3653,12 @@ softdep_fsync(vp) } vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p); if (flushparent) { -#ifdef __FreeBSD__ - error = UFS_UPDATE(pvp, 1); -#else +#ifndef __FreeBSD__ tv = time; - error = UFS_UPDATE(pvp, &tv, &tv, 1); -#endif - if (error) { +#else + getmicrotime(&tv); +#endif /* __FreeBSD__ */ + if (error = UFS_UPDATE(pvp, &tv, &tv, MNT_WAIT)) { vput(pvp); return (error); } @@ -3740,7 +3740,7 @@ softdep_sync_metadata(ap) */ waitfor = MNT_NOWAIT; top: - if (getdirtybuf(&TAILQ_FIRST(&vp->v_dirtyblkhd), MNT_WAIT) == 0) { + if (getdirtybuf(&LIST_FIRST(&vp->v_dirtyblkhd), MNT_WAIT) == 0) { while (vp->v_numoutput) { vp->v_flag |= VBWAIT; FREE_LOCK_INTERLOCKED(&lk); @@ -3751,7 +3751,7 @@ top: FREE_LOCK(&lk); return (0); } - bp = TAILQ_FIRST(&vp->v_dirtyblkhd); + bp = LIST_FIRST(&vp->v_dirtyblkhd); loop: /* * As we hold the buffer locked, none of its dependencies @@ -3850,8 +3850,8 @@ loop: /* NOTREACHED */ } } - (void) getdirtybuf(&TAILQ_NEXT(bp, b_vnbufs), MNT_WAIT); - nbp = TAILQ_NEXT(bp, b_vnbufs); + (void) getdirtybuf(&LIST_NEXT(bp, b_vnbufs), MNT_WAIT); + nbp = LIST_NEXT(bp, b_vnbufs); FREE_LOCK(&lk); bawrite(bp); ACQUIRE_LOCK(&lk); @@ -3887,7 +3887,7 @@ loop: * then we are done. For certain directories and block * devices, we may need to do further work. */ - if (TAILQ_FIRST(&vp->v_dirtyblkhd) == NULL) { + if (LIST_FIRST(&vp->v_dirtyblkhd) == NULL) { FREE_LOCK(&lk); return (0); } @@ -4012,9 +4012,7 @@ flush_pagedep_deps(pvp, mp, diraddhdp) struct inodedep *inodedep; struct ufsmount *ump; struct diradd *dap; -#ifndef __FreeBSD__ struct timeval tv; -#endif struct vnode *vp; int gotit, error = 0; struct buf *bp; @@ -4027,14 +4025,13 @@ flush_pagedep_deps(pvp, mp, diraddhdp) * has a MKDIR_PARENT dependency. */ if (dap->da_state & MKDIR_PARENT) { - FREE_LOCK(&lk); -#ifdef __FreeBSD__ - error = UFS_UPDATE(pvp, 1); -#else +#ifndef __FreeBSD__ tv = time; - error = UFS_UPDATE(pvp, &tv, &tv, 1); -#endif - if (error) +#else + getmicrotime(&tv); +#endif /* __FreeBSD__ */ + FREE_LOCK(&lk); + if (error = UFS_UPDATE(pvp, &tv, &tv, MNT_WAIT)) break; ACQUIRE_LOCK(&lk); /* @@ -4116,12 +4113,12 @@ flush_pagedep_deps(pvp, mp, diraddhdp) } FREE_LOCK(&lk); } -#ifdef __FreeBSD__ - error = UFS_UPDATE(vp, 1); -#else +#ifndef __FreeBSD__ tv = time; - error = UFS_UPDATE(vp, &tv, &tv, 1); -#endif +#else + getmicrotime(&tv); +#endif /* __FreeBSD__ */ + error = UFS_UPDATE(vp, &tv, &tv, MNT_WAIT); vput(vp); if (error) break; |
