Author: avatar
Date: Sat Oct 24 19:40:27 2015
New Revision: 289889
URL: https://svnweb.freebsd.org/changeset/base/289889

Log:
  MFC r238980:
  
    Just like the other file systems found in /sys/fs, g_vfs_open()
  should be paried with g_vfs_close().  Though g_vfs_close() is a wrapper
  around g_wither_geom_close(), r206130 added the following test in
  g_vfs_open():
  
        if (bo->bo_private != vp)
                return (EBUSY);
  
    Which will cause a 'Device busy' error inside reiserfs_mountfs() if
  the same file system is re-mounted again after umount or mounting failure:
  
        (case 1, /dev/ad4s3 is not a valid REISERFS partition)
        # mount -t reiserfs -o ro /dev/ad4s3 /mnt
        mount: /dev/ad4s3: Invalid argument
        # mount -t msdosfs -o ro /dev/ad4s3 /mnt
        mount: /dev/ad4s3: Device busy
  
        (case 2, /dev/ad4s3 is a valid REISERFS partition)
        # mount -t reiserfs -o ro /dev/ad4s3 /mnt
        # umount /mnt
        # mount -t reiserfs -o ro /dev/ad4s3 /mnt
        mount: /dev/ad4s3: Device busy
  
    On the other hand, g_vfs_close() 'fixed' the above cases by doing an
  extra step to keep 'sc->sc_bo->bo_private' and 'cp->private' pointers
  synchronised.
  
  Reviewed by:  kib

Modified:
  stable/7/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
Directory Properties:
  stable/7/sys/   (props changed)

Modified: stable/7/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
==============================================================================
--- stable/7/sys/gnu/fs/reiserfs/reiserfs_vfsops.c      Sat Oct 24 19:40:03 
2015        (r289888)
+++ stable/7/sys/gnu/fs/reiserfs/reiserfs_vfsops.c      Sat Oct 24 19:40:27 
2015        (r289889)
@@ -223,7 +223,7 @@ reiserfs_unmount(struct mount *mp, int m
 
        DROP_GIANT();
        g_topology_lock();
-       g_wither_geom_close(rmp->rm_cp->geom, ENXIO);
+       g_vfs_close(rmp->rm_cp, td);
        g_topology_unlock();
        PICKUP_GIANT();
        vrele(rmp->rm_devvp);
@@ -635,7 +635,7 @@ out:
        if (cp != NULL) {
                DROP_GIANT();
                g_topology_lock();
-               g_wither_geom_close(cp->geom, ENXIO);
+               g_vfs_close(cp, td);
                g_topology_unlock();
                PICKUP_GIANT();
        }
_______________________________________________
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