diff options
author | dyson <dyson@FreeBSD.org> | 1998-03-21 05:16:09 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1998-03-21 05:16:09 +0000 |
commit | 2c31fae3ef513c6fe555131dfef7a17d7b03a506 (patch) | |
tree | 83e3a5115eaf4d2cbcf3f0a0cc503c9e8baf4cbf | |
parent | ae412a3109e0a2f7ec85f4d46cccb9915e8bdbe9 (diff) | |
download | FreeBSD-src-2c31fae3ef513c6fe555131dfef7a17d7b03a506.zip FreeBSD-src-2c31fae3ef513c6fe555131dfef7a17d7b03a506.tar.gz |
Softdep_sync_metadata appears to expect that it is called at splbio,
so make it so...
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 8e2c218..0f7f210 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)ffs_vnops.c 8.15 (Berkeley) 5/14/95 - * $Id: ffs_vnops.c,v 1.44 1998/03/08 09:59:10 julian Exp $ + * $Id: ffs_vnops.c,v 1.45 1998/03/19 22:49:44 dyson Exp $ */ #include <sys/param.h> @@ -214,19 +214,24 @@ loop2: splx(s); if (ap->a_waitfor == MNT_WAIT) { + s = splbio(); - while (vp->v_numoutput) { - vp->v_flag |= VBWAIT; - (void) tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 4, "ffsfsn", 0); + if (!DOINGSOFTDEP(vp)) { + while (vp->v_numoutput) { + vp->v_flag |= VBWAIT; + (void) tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 4, "ffsfsn", 0); + } + } else { + /* + * Ensure that any filesystem metatdata associated + * with the vnode has been written. + */ + if ((error = softdep_sync_metadata(ap)) != 0) { + splx(s); + return (error); + } } - /* - * Ensure that any filesystem metatdata associated - * with the vnode has been written. - */ - splx(s); - if ((error = softdep_sync_metadata(ap)) != 0) - return (error); - s = splbio(); + if (vp->v_dirtyblkhd.lh_first) { /* * Block devices associated with filesystems may |