disable MNT_ASYNC when doing sync and unmount
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Mon, 24 Jan 1994 16:08:42 +0000 (08:08 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Mon, 24 Jan 1994 16:08:42 +0000 (08:08 -0800)
SCCS-vsn: sys/kern/vfs_syscalls.c 8.8

usr/src/sys/kern/vfs_syscalls.c

index 4ef4829..86e644c 100644 (file)
@@ -238,6 +238,7 @@ dounmount(mp, flags, p)
        if (error = vfs_lock(mp))
                return (error);
 
        if (error = vfs_lock(mp))
                return (error);
 
+       mp->mnt_flag &=~ MNT_ASYNC;
        vnode_pager_umount(mp); /* release cached vnodes */
        cache_purgevfs(mp);     /* remove cache entries for this file sys */
        if ((error = VFS_SYNC(mp, MNT_WAIT, p->p_ucred, p)) == 0 ||
        vnode_pager_umount(mp); /* release cached vnodes */
        cache_purgevfs(mp);     /* remove cache entries for this file sys */
        if ((error = VFS_SYNC(mp, MNT_WAIT, p->p_ucred, p)) == 0 ||
@@ -277,6 +278,7 @@ sync(p, uap, retval)
        int *retval;
 {
        register struct mount *mp, *nmp;
        int *retval;
 {
        register struct mount *mp, *nmp;
+       int asyncflag;
 
        for (mp = mountlist.tqh_first; mp != NULL; mp = nmp) {
                nmp = mp->mnt_list.tqe_next;
 
        for (mp = mountlist.tqh_first; mp != NULL; mp = nmp) {
                nmp = mp->mnt_list.tqe_next;
@@ -286,7 +288,11 @@ sync(p, uap, retval)
                 */
                if ((mp->mnt_flag & (MNT_MLOCK|MNT_RDONLY|MNT_MPBUSY)) == 0 &&
                    !vfs_busy(mp)) {
                 */
                if ((mp->mnt_flag & (MNT_MLOCK|MNT_RDONLY|MNT_MPBUSY)) == 0 &&
                    !vfs_busy(mp)) {
+                       asyncflag = mp->mnt_flag & MNT_ASYNC;
+                       mp->mnt_flag &= ~MNT_ASYNC;
                        VFS_SYNC(mp, MNT_NOWAIT, p->p_ucred, p);
                        VFS_SYNC(mp, MNT_NOWAIT, p->p_ucred, p);
+                       if (asyncflag)
+                               mp->mnt_flag |= MNT_ASYNC;
                        vfs_unbusy(mp);
                }
        }
                        vfs_unbusy(mp);
                }
        }