--- a/sys/vfs/ufs/ffs_softdep.c +++ b/sys/vfs/ufs/ffs_softdep.c @@ -2166,7 +2166,7 @@ if ((bn = freeblks->fb_iblks[level]) == 0) continue; if ((error = indir_trunc(&tip, fsbtodoff(fs, bn), level, - baselbns[level], &blocksreleased)) == 0) + baselbns[level], &blocksreleased)) != 0) allerror = error; ffs_blkfree(&tip, bn, fs->fs_bsize); blocksreleased += nblocks; @@ -4652,11 +4652,14 @@ * push them to disk. */ if ((inodedep->id_state & DEPCOMPLETE) == 0) { + struct buf *ibp; + gotit = getdirtybuf(&inodedep->id_buf, MNT_WAIT); if (gotit == 0) goto retry_lookup; + ibp = inodedep->id_buf; FREE_LOCK(&lk); - if (gotit && (error = bwrite(inodedep->id_buf)) != 0) + if (gotit && (error = bwrite(ibp)) != 0) break; ACQUIRE_LOCK(&lk); if (dap != LIST_FIRST(diraddhdp))