Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Sep 2011 13:19:47 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r225832 - head/sbin/hastd
Message-ID:  <201109281319.p8SDJlv7074713@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Wed Sep 28 13:19:47 2011
New Revision: 225832
URL: http://svn.freebsd.org/changeset/base/225832

Log:
  If the underlying provider doesn't support BIO_FLUSH, log it only once
  and don't bother trying in the future.
  
  MFC after:	3 days

Modified:
  head/sbin/hastd/hast.h
  head/sbin/hastd/parse.y
  head/sbin/hastd/primary.c
  head/sbin/hastd/secondary.c

Modified: head/sbin/hastd/hast.h
==============================================================================
--- head/sbin/hastd/hast.h	Wed Sep 28 13:13:43 2011	(r225831)
+++ head/sbin/hastd/hast.h	Wed Sep 28 13:19:47 2011	(r225832)
@@ -167,6 +167,8 @@ struct hast_resource {
 	off_t	hr_local_mediasize;
 	/* Sector size of local provider. */
 	unsigned int hr_local_sectorsize;
+	/* Is flushing write cache supported by the local provider? */
+	bool	hr_localflush;
 	/* Flush write cache on metadata updates? */
 	int	hr_metaflush;
 

Modified: head/sbin/hastd/parse.y
==============================================================================
--- head/sbin/hastd/parse.y	Wed Sep 28 13:13:43 2011	(r225831)
+++ head/sbin/hastd/parse.y	Wed Sep 28 13:19:47 2011	(r225832)
@@ -788,6 +788,7 @@ resource_start:	STR
 		curres->hr_provname[0] = '\0';
 		curres->hr_localpath[0] = '\0';
 		curres->hr_localfd = -1;
+		curres->hr_localflush = true;
 		curres->hr_metaflush = -1;
 		curres->hr_remoteaddr[0] = '\0';
 		curres->hr_sourceaddr[0] = '\0';

Modified: head/sbin/hastd/primary.c
==============================================================================
--- head/sbin/hastd/primary.c	Wed Sep 28 13:13:43 2011	(r225831)
+++ head/sbin/hastd/primary.c	Wed Sep 28 13:19:47 2011	(r225832)
@@ -1304,8 +1304,15 @@ local_send_thread(void *arg)
 			}
 			break;
 		case BIO_FLUSH:
+			if (!res->hr_localflush) {
+				ret = -1;
+				errno = EOPNOTSUPP;
+				break;
+			}
 			ret = g_flush(res->hr_localfd);
 			if (ret < 0) {
+				if (errno == EOPNOTSUPP)
+					res->hr_localflush = false;
 				hio->hio_errors[ncomp] = errno;
 				reqlog(LOG_WARNING, 0, ggio,
 				    "Local request failed (%s): ",

Modified: head/sbin/hastd/secondary.c
==============================================================================
--- head/sbin/hastd/secondary.c	Wed Sep 28 13:13:43 2011	(r225831)
+++ head/sbin/hastd/secondary.c	Wed Sep 28 13:19:47 2011	(r225832)
@@ -664,7 +664,7 @@ disk_thread(void *arg)
 	struct hast_resource *res = arg;
 	struct hio *hio;
 	ssize_t ret;
-	bool clear_activemap;
+	bool clear_activemap, logerror;
 
 	clear_activemap = true;
 
@@ -702,6 +702,7 @@ disk_thread(void *arg)
 			break;
 		}
 		reqlog(LOG_DEBUG, 2, -1, hio, "disk: (%p) Got request: ", hio);
+		logerror = true;
 		/* Handle the actual request. */
 		switch (hio->hio_cmd) {
 		case HIO_READ:
@@ -736,14 +737,23 @@ disk_thread(void *arg)
 				hio->hio_error = 0;
 			break;
 		case HIO_FLUSH:
+			if (!res->hr_localflush) {
+				ret = -1;
+				hio->hio_error = EOPNOTSUPP;
+				logerror = false;
+				break;
+			}
 			ret = g_flush(res->hr_localfd);
-			if (ret < 0)
+			if (ret < 0) {
+				if (errno == EOPNOTSUPP)
+					res->hr_localflush = false;
 				hio->hio_error = errno;
-			else
+			} else {
 				hio->hio_error = 0;
+			}
 			break;
 		}
-		if (hio->hio_error != 0) {
+		if (logerror && hio->hio_error != 0) {
 			reqlog(LOG_ERR, 0, hio->hio_error, hio,
 			    "Request failed: ");
 		}



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