vBulletin Search Engine Optimization
| |||||||
| Register | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| It'd be nice to rule out the possibility of that check being fooled by pool(9). Would you mind trying this diff? -p. Index: ffs_softdep.c ================================================== ================= RCS file: /cvs/src/sys/ufs/ffs/ffs_softdep.c,v retrieving revision 1.68 diff -u -r1.68 ffs_softdep.c --- ffs_softdep.c 3 Jan 2006 23:34:39 -0000 1.68 +++ ffs_softdep.c 29 May 2006 00:16:16 -0000 @@ -5074,6 +5074,9 @@ struct inodedep *inodedep; struct ufsmount *ump; struct diradd *dap; +#ifdef DIAGNOSTIC + struct diradd *dap2 = NULL; +#endif struct vnode *vp; int gotit, error = 0; struct buf *bp; @@ -5081,8 +5084,16 @@ splassert(IPL_BIO); +#ifdef DIAGNOSTIC + dap2 = malloc(sizeof(struct diradd), M_TEMP, M_NOWAIT); +#endif + ump = VFSTOUFS(mp); while ((dap = LIST_FIRST(diraddhdp)) != NULL) { +#ifdef DIAGNOSTIC + if (dap2) + *dap2 = *dap; +#endif /* * Flush ourselves if this directory entry * has a MKDIR_PARENT dependency. @@ -5179,15 +5190,27 @@ if ((error = bwrite(bp)) != 0) break; ACQUIRE_LOCK(&lk); + +#ifdef DIAGNOSTIC /* * If we have failed to get rid of all the dependencies * then something is seriously wrong. */ - if (dap == LIST_FIRST(diraddhdp)) { - FREE_LOCK(&lk); - panic("flush_pagedep_deps: flush failed"); - } + if (dap == LIST_FIRST(diraddhdp)) + if (dap2 && dap->da_offset == dap2->da_offset && + dap->da_newinum == dap2->da_newinum) { + FREE_LOCK(&lk); + panic("flush_pagedep_deps: flush failed"); + } +#endif + } + +#ifdef DIAGNOSTIC + if (dap2) + free(dap2, M_TEMP); +#endif + if (error) ACQUIRE_LOCK(&lk); return (error); |