Blob Blame History Raw
From 086a2e973c678b9b06bf023188959f603b20d568 Mon Sep 17 00:00:00 2001
From: David Disseldorp <ddiss@suse.de>
Date: Tue, 8 Mar 2016 17:04:20 +0100
Subject: [PATCH] rbd: don't log miscompare as an error
Patch-mainline: Not yet, SES2 clustered LIO/RBD
References: bsc#970062

Compare And Write requests are used by ESXi initiators for cluster
locking. A miscompare event shouldn't be logged as an error. Change
such cases to debug/notice messages.

Signed-off-by: David Disseldorp <ddiss@suse.de>
---
 drivers/block/rbd.c              |   23 +++++++++++++++++------
 drivers/target/target_core_rbd.c |    4 ++--
 2 files changed, 19 insertions(+), 8 deletions(-)

--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -2240,13 +2240,24 @@ static bool rbd_img_obj_end_request(stru
 	result = obj_request->result;
 	if (result) {
 		struct rbd_device *rbd_dev = img_request->rbd_dev;
+		enum obj_operation_type op_type
+					= rbd_img_request_op_type(img_request);
 
-		rbd_warn(rbd_dev, "%s %llx at %llx (%llx)",
-			obj_op_name(rbd_img_request_op_type(img_request)),
-			obj_request->length, obj_request->img_offset,
-			obj_request->offset);
-		rbd_warn(rbd_dev, "  result %d xferred %x",
-			result, xferred);
+		if ((op_type == OBJ_OP_CMP_AND_WRITE)
+		 && (result == -EILSEQ)) {
+			dout("%s: miscompare rbd_dev %p %s %llx at %llx "
+			     "(%llx)\n", __func__, rbd_dev,
+			     obj_op_name(op_type),
+			     obj_request->length, obj_request->img_offset,
+			     obj_request->offset);
+		} else {
+			rbd_warn(rbd_dev, "%s %llx at %llx (%llx)",
+				 obj_op_name(op_type),
+				 obj_request->length, obj_request->img_offset,
+				 obj_request->offset);
+			rbd_warn(rbd_dev, "  result %d xferred %x",
+				 result, xferred);
+		}
 		if (!img_request->result)
 			img_request->result = result;
 		/*
--- a/drivers/target/target_core_rbd.c
+++ b/drivers/target/target_core_rbd.c
@@ -401,8 +401,8 @@ static void tcm_rbd_cmp_and_write_callba
 	if (img_request->result <= -MAX_ERRNO) {
 		/* OSDs return -MAX_ERRNO - offset_of_mismatch */
 		cmd->sense_info = (u32)(-1 * (img_request->result + MAX_ERRNO));
-		pr_err("COMPARE_AND_WRITE: miscompare at offset %llu\n",
-		       (unsigned long long)cmd->bad_sector);
+		pr_notice("COMPARE_AND_WRITE: miscompare at offset %llu\n",
+			  (unsigned long long)cmd->bad_sector);
 		sense_reason = TCM_MISCOMPARE_VERIFY;
 	}
 	kfree(tcm_rbd_dev->cmp_and_write_sg);