diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -1935,7 +1935,10 @@ if (vp == NULL) vfs_ref(mp); - return (vn_start_write_refed(mp, flags, false)); + error = vn_start_write_refed(mp, flags, false); + if (error != 0 && (flags & V_NOWAIT) == 0) + *mpp = NULL; + return (error); } /* @@ -1951,7 +1954,7 @@ struct mount *mp; int error, mflags; - KASSERT((flags & ~V_VALID_FLAGS) == 0, + KASSERT((flags & (~V_VALID_FLAGS | V_XSLEEP)) == 0, ("%s: invalid flags passed %d\n", __func__, flags)); retry: @@ -1989,6 +1992,7 @@ if ((flags & V_NOWAIT) != 0) { MNT_REL(mp); MNT_IUNLOCK(mp); + *mpp = NULL; return (EWOULDBLOCK); } /* @@ -2004,6 +2008,7 @@ vfs_rel(mp); if (error == 0) goto retry; + *mpp = NULL; return (error); }