From fc3c0c4dca2800140bd66100770403b1346cf738 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Sat, 30 May 2020 19:03:20 +0200 Subject: [PATCH] librbd: make rbd_read_from_replica_policy actually work Commit d92be8b5856d ("librbd: Improved support for balanced and localized reads") introduced read_flags, but used low-level Objecter flags (CEPH_OSD_FLAG_*). This is wrong because librbd sits on top of librados, not Objecter. "balance" ends up being translated into IGNORE_REDIRECT and "localize" being ignored. Fixes: https://tracker.ceph.com/issues/45798 Signed-off-by: Ilya Dryomov --- src/librbd/ImageCtx.cc | 4 ++-- src/librbd/ImageCtx.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index a2a3f1f2440..8d71a8e061c 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -808,9 +808,9 @@ public: read_flags = 0; auto read_policy = config.get_val("rbd_read_from_replica_policy"); if (read_policy == "balance") { - read_flags |= CEPH_OSD_FLAG_BALANCE_READS; + read_flags |= librados::OPERATION_BALANCE_READS; } else if (read_policy == "localize") { - read_flags |= CEPH_OSD_FLAG_LOCALIZE_READS; + read_flags |= librados::OPERATION_LOCALIZE_READS; } } diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index d1c2ef135cd..b2b15b7455c 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -137,7 +137,7 @@ namespace librbd { ceph::mutex async_ops_lock; // protects async_ops and async_requests ceph::mutex copyup_list_lock; // protects copyup_waiting_list - unsigned extra_read_flags; + unsigned extra_read_flags; // librados::OPERATION_* bool old_format; uint8_t order; @@ -211,7 +211,7 @@ namespace librbd { bool clone_copy_on_read; bool enable_alloc_hint; uint32_t alloc_hint_flags = 0U; - uint32_t read_flags = 0U; + uint32_t read_flags = 0U; // librados::OPERATION_* uint32_t discard_granularity_bytes = 0; bool blkin_trace_all; uint64_t mirroring_replay_delay; -- 2.39.5