Author: ae
Date: Mon Aug  1 20:54:54 2016
New Revision: 303637
URL: https://svnweb.freebsd.org/changeset/base/303637

Log:
  Do not invoke resize event if initial disk size is zero. Some disks
  report the size only after first opening.  And due to the events are
  asynchronous, some consumers can receive this event too late and
  this confuses them. This partially restores previous behaviour, and
  at the same time this should fix the problem, when already opened
  provider loses resize event.
  
  PR:           211028
  MFC after:    3 weeks

Modified:
  head/sys/geom/geom_disk.c

Modified: head/sys/geom/geom_disk.c
==============================================================================
--- head/sys/geom/geom_disk.c   Mon Aug  1 20:29:09 2016        (r303636)
+++ head/sys/geom/geom_disk.c   Mon Aug  1 20:54:54 2016        (r303637)
@@ -142,7 +142,14 @@ g_disk_access(struct g_provider *pp, int
                pp->stripeoffset = dp->d_stripeoffset;
                pp->stripesize = dp->d_stripesize;
                dp->d_flags |= DISKFLAG_OPEN;
-               g_resize_provider(pp, dp->d_mediasize);
+               /*
+                * Do not invoke resize event when initial size was zero.
+                * Some disks report its size only after first opening.
+                */
+               if (pp->mediasize == 0)
+                       pp->mediasize = dp->d_mediasize;
+               else
+                       g_resize_provider(pp, dp->d_mediasize);
        } else if ((pp->acr + pp->acw + pp->ace) > 0 && (r + w + e) == 0) {
                if (dp->d_close != NULL) {
                        error = dp->d_close(dp);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to