summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1998-07-03 03:47:24 +0000
committerdg <dg@FreeBSD.org>1998-07-03 03:47:24 +0000
commit4795d888ab00ba1c25a6722f722ff840ee6ce8a6 (patch)
treef3c0db1c932f78bd74f55a04f02d52fe6f56af83 /sys
parentdfce3d1bdb731be07cf77cc3e7b26ae1fdf4b444 (diff)
downloadFreeBSD-src-4795d888ab00ba1c25a6722f722ff840ee6ce8a6.zip
FreeBSD-src-4795d888ab00ba1c25a6722f722ff840ee6ce8a6.tar.gz
Reset MNT_ASYNC flag if needed if unmount() should fail.
Submitted by: Paul Saab <paul@mu.org>
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/vfs_extattr.c5
-rw-r--r--sys/kern/vfs_syscalls.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 840687a..4d7dff3 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
- * $Id: vfs_syscalls.c,v 1.102 1998/06/07 17:11:47 dfr Exp $
+ * $Id: vfs_syscalls.c,v 1.103 1998/06/08 18:18:28 dyson Exp $
*/
/* For 4.3 integer FS ID compatibility */
@@ -435,6 +435,7 @@ dounmount(mp, flags, p)
{
struct vnode *coveredvp;
int error;
+ int async_flag;
simple_lock(&mountlist_slock);
mp->mnt_kern_flag |= MNTK_UNMOUNT;
@@ -444,6 +445,7 @@ dounmount(mp, flags, p)
vfs_setpublicfs(NULL, NULL, NULL);
vfs_msync(mp, MNT_WAIT);
+ async_flag = mp->mnt_flag & MNT_ASYNC;
mp->mnt_flag &=~ MNT_ASYNC;
cache_purgevfs(mp); /* remove cache entries for this file sys */
if (mp->mnt_syncer != NULL)
@@ -457,6 +459,7 @@ dounmount(mp, flags, p)
if ((mp->mnt_flag & MNT_RDONLY) == 0 && mp->mnt_syncer == NULL)
(void) vfs_allocate_syncvnode(mp);
mp->mnt_kern_flag &= ~MNTK_UNMOUNT;
+ mp->mnt_flag |= async_flag;
lockmgr(&mp->mnt_lock, LK_RELEASE | LK_INTERLOCK | LK_REENABLE,
&mountlist_slock, p);
return (error);
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 840687a..4d7dff3 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94
- * $Id: vfs_syscalls.c,v 1.102 1998/06/07 17:11:47 dfr Exp $
+ * $Id: vfs_syscalls.c,v 1.103 1998/06/08 18:18:28 dyson Exp $
*/
/* For 4.3 integer FS ID compatibility */
@@ -435,6 +435,7 @@ dounmount(mp, flags, p)
{
struct vnode *coveredvp;
int error;
+ int async_flag;
simple_lock(&mountlist_slock);
mp->mnt_kern_flag |= MNTK_UNMOUNT;
@@ -444,6 +445,7 @@ dounmount(mp, flags, p)
vfs_setpublicfs(NULL, NULL, NULL);
vfs_msync(mp, MNT_WAIT);
+ async_flag = mp->mnt_flag & MNT_ASYNC;
mp->mnt_flag &=~ MNT_ASYNC;
cache_purgevfs(mp); /* remove cache entries for this file sys */
if (mp->mnt_syncer != NULL)
@@ -457,6 +459,7 @@ dounmount(mp, flags, p)
if ((mp->mnt_flag & MNT_RDONLY) == 0 && mp->mnt_syncer == NULL)
(void) vfs_allocate_syncvnode(mp);
mp->mnt_kern_flag &= ~MNTK_UNMOUNT;
+ mp->mnt_flag |= async_flag;
lockmgr(&mp->mnt_lock, LK_RELEASE | LK_INTERLOCK | LK_REENABLE,
&mountlist_slock, p);
return (error);
OpenPOWER on IntegriCloud