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              | 25 ++++++++++++++++++-------
 drivers/target/target_core_rbd.c |  4 ++--
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index d930715..9caf76a 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -2303,13 +2303,24 @@ static bool rbd_img_obj_end_request(struct rbd_obj_request *obj_request)
 	result = obj_request->result;
 	if (result) {
 		struct rbd_device *rbd_dev = img_request->rbd_dev;
-
-		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);
+		enum obj_operation_type op_type
+					= rbd_img_request_op_type(img_request);
+
+		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;
 		/*
diff --git a/drivers/target/target_core_rbd.c b/drivers/target/target_core_rbd.c
index 24008e9..52c0e5c 100644
--- a/drivers/target/target_core_rbd.c
+++ b/drivers/target/target_core_rbd.c
@@ -404,8 +404,8 @@ static void tcm_rbd_cmp_and_write_callback(struct rbd_img_request *img_request)
 					   &miscompare_off, 0,
 					   sizeof(miscompare_off));
 		cmd->sense_info = (u32)le64_to_cpu(miscompare_off);
-		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);
-- 
2.6.6