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>