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);