Author: kib
Date: Thu Mar 28 13:44:18 2019
New Revision: 345642
URL: https://svnweb.freebsd.org/changeset/base/345642

Log:
  MFC r345376:
  nullfs: fix unmounts when filesystem is active.

Modified:
  stable/11/sys/fs/nullfs/null_vfsops.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/fs/nullfs/null_vfsops.c
==============================================================================
--- stable/11/sys/fs/nullfs/null_vfsops.c       Thu Mar 28 13:42:37 2019        
(r345641)
+++ stable/11/sys/fs/nullfs/null_vfsops.c       Thu Mar 28 13:44:18 2019        
(r345642)
@@ -236,7 +236,7 @@ nullfs_unmount(mp, mntflags)
 {
        struct null_mount *mntdata;
        struct mount *ump;
-       int error, flags;
+       int error, flags, rootrefs;
 
        NULLFSDEBUG("nullfs_unmount: mp = %p\n", (void *)mp);
 
@@ -245,10 +245,20 @@ nullfs_unmount(mp, mntflags)
        else
                flags = 0;
 
-       /* There is 1 extra root vnode reference (nullm_rootvp). */
-       error = vflush(mp, 1, flags, curthread);
-       if (error)
-               return (error);
+       for (rootrefs = 1;; rootrefs = 0) {
+               /* There is 1 extra root vnode reference (nullm_rootvp). */
+               error = vflush(mp, rootrefs, flags, curthread);
+               if (error)
+                       return (error);
+               MNT_ILOCK(mp);
+               if (mp->mnt_nvnodelistsize == 0) {
+                       MNT_IUNLOCK(mp);
+                       break;
+               }
+               MNT_IUNLOCK(mp);
+               if ((mntflags & MNT_FORCE) == 0)
+                       return (EBUSY);
+       }
 
        /*
         * Finally, throw away the null_mount structure
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to