Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Aug 2016 20:54:54 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r303637 - head/sys/geom
Message-ID:  <201608012054.u71KssUh084870@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201608012054.u71KssUh084870>