Author: trasz
Date: Tue Nov 14 17:56:32 2017
New Revision: 325819
URL: https://svnweb.freebsd.org/changeset/base/325819

Log:
  MFC r324276:
  
  Don't destroy gmountver(8) devices on shutdown, unless they are orphaned.
  Otherwise we would fail to sync the filesystem on reboot.

Modified:
  stable/11/sys/geom/mountver/g_mountver.c
  stable/11/sys/geom/mountver/g_mountver.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/geom/mountver/g_mountver.c
==============================================================================
--- stable/11/sys/geom/mountver/g_mountver.c    Tue Nov 14 17:54:00 2017        
(r325818)
+++ stable/11/sys/geom/mountver/g_mountver.c    Tue Nov 14 17:56:32 2017        
(r325819)
@@ -190,6 +190,11 @@ g_mountver_start(struct bio *bp)
         * requests in order to maintain ordering.
         */
        if (sc->sc_orphaned || !TAILQ_EMPTY(&sc->sc_queue)) {
+               if (sc->sc_shutting_down) {
+                       G_MOUNTVER_LOGREQ(bp, "Discarding request due to 
shutdown.");
+                       g_io_deliver(bp, ENXIO);
+                       return;
+               }
                G_MOUNTVER_LOGREQ(bp, "Queueing request.");
                g_mountver_queue(bp);
                if (!sc->sc_orphaned)
@@ -607,13 +612,20 @@ g_mountver_dumpconf(struct sbuf *sb, const char *inden
 static void
 g_mountver_shutdown_pre_sync(void *arg, int howto)
 {
+       struct g_mountver_softc *sc;
        struct g_class *mp;
        struct g_geom *gp, *gp2;
 
        mp = arg;
        g_topology_lock();
-       LIST_FOREACH_SAFE(gp, &mp->geom, geom, gp2)
-               g_mountver_destroy(gp, 1);
+       LIST_FOREACH_SAFE(gp, &mp->geom, geom, gp2) {
+               if (gp->softc == NULL)
+                       continue;
+               sc = gp->softc;
+               sc->sc_shutting_down = 1;
+               if (sc->sc_orphaned)
+                       g_mountver_destroy(gp, 1);
+       }
        g_topology_unlock();
 }
 

Modified: stable/11/sys/geom/mountver/g_mountver.h
==============================================================================
--- stable/11/sys/geom/mountver/g_mountver.h    Tue Nov 14 17:54:00 2017        
(r325818)
+++ stable/11/sys/geom/mountver/g_mountver.h    Tue Nov 14 17:56:32 2017        
(r325819)
@@ -62,6 +62,7 @@ struct g_mountver_softc {
        char                            *sc_provider_name;
        char                            sc_ident[DISK_IDENT_SIZE];
        int                             sc_orphaned;
+       int                             sc_shutting_down;
        int                             sc_access_r;
        int                             sc_access_w;
        int                             sc_access_e;
_______________________________________________
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