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