[lvm-devel] master - lvmlockd: recognize normal errors from sanlock_convert

David Teigland teigland at sourceware.org
Tue Dec 5 17:56:15 UTC 2017


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=46d6f7a6393d1d99411d7896285f6f1556de8547
Commit:        46d6f7a6393d1d99411d7896285f6f1556de8547
Parent:        bd893348b415d4e604a7f9a503f17623d485e76e
Author:        David Teigland <teigland at redhat.com>
AuthorDate:    Wed Nov 29 15:17:25 2017 -0600
Committer:     David Teigland <teigland at redhat.com>
CommitterDate: Tue Dec 5 11:53:03 2017 -0600

lvmlockd: recognize normal errors from sanlock_convert

Don't log an error message for error values returned
by sanlock_convert for expected conditions like lock
contention or io timeouts.
---
 daemons/lvmlockd/lvmlockd-core.c    |    9 ++++-----
 daemons/lvmlockd/lvmlockd-sanlock.c |   20 +++++++++++++++-----
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/daemons/lvmlockd/lvmlockd-core.c b/daemons/lvmlockd/lvmlockd-core.c
index a921140..df6e214 100644
--- a/daemons/lvmlockd/lvmlockd-core.c
+++ b/daemons/lvmlockd/lvmlockd-core.c
@@ -1389,12 +1389,11 @@ static int res_convert(struct lockspace *ls, struct resource *r,
 	}
 
 	rv = lm_convert(ls, r, act->mode, act, r_version);
-	if (rv < 0) {
-		log_error("S %s R %s res_convert lm error %d", ls->name, r->name, rv);
-		return rv;
-	}
 
-	log_debug("S %s R %s res_convert lm done", ls->name, r->name);
+	log_debug("S %s R %s res_convert rv %d", ls->name, r->name, rv);
+
+	if (rv < 0)
+		return rv;
 
 	if (lk->mode == LD_LK_EX && act->mode == LD_LK_SH) {
 		r->sh_count = 1;
diff --git a/daemons/lvmlockd/lvmlockd-sanlock.c b/daemons/lvmlockd/lvmlockd-sanlock.c
index 079e952..2171c7a 100644
--- a/daemons/lvmlockd/lvmlockd-sanlock.c
+++ b/daemons/lvmlockd/lvmlockd-sanlock.c
@@ -1699,12 +1699,22 @@ int lm_convert_sanlock(struct lockspace *ls, struct resource *r,
 	flags |= SANLK_ACQUIRE_OWNER_NOWAIT;
 
 	rv = sanlock_convert(lms->sock, -1, flags, rs);
-	if (rv == -EAGAIN) {
-		/* FIXME: When could this happen?  Should something different be done? */
-		log_error("S %s R %s convert_san EAGAIN", ls->name, r->name);
+	if (!rv)
+		return 0;
+
+	switch (rv) {
+	case -EAGAIN:
+	case SANLK_ACQUIRE_IDLIVE:
+	case SANLK_ACQUIRE_OWNED:
+	case SANLK_ACQUIRE_OWNED_RETRY:
+	case SANLK_ACQUIRE_OTHER:
+	case SANLK_AIO_TIMEOUT:
+	case SANLK_DBLOCK_LVER:
+	case SANLK_DBLOCK_MBAL:
+		/* expected errors from known/normal cases like lock contention or io timeouts */
+		log_debug("S %s R %s convert_san error %d", ls->name, r->name, rv);
 		return -EAGAIN;
-	}
-	if (rv < 0) {
+	default:
 		log_error("S %s R %s convert_san convert error %d", ls->name, r->name, rv);
 		rv = -ELMERR;
 	}




More information about the lvm-devel mailing list