From b01133661e3bc1814f66df3de70aefd005965b27 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Mon, 22 Apr 2019 12:12:33 +0200 Subject: [PATCH] librbd: avoid repeatedly invoking is_zero() in CopyupRequest Invoke is_zero() just once, either in handle_read_from_parent() or handle_deep_copy(). Initialize m_copyup_is_zero to true to preserve existing behavior: on an empty bufferlist is_zero() returns true. Signed-off-by: Ilya Dryomov --- src/librbd/io/CopyupRequest.cc | 7 ++++--- src/librbd/io/CopyupRequest.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/librbd/io/CopyupRequest.cc b/src/librbd/io/CopyupRequest.cc index 2299d3bf341..1cf686f15bd 100644 --- a/src/librbd/io/CopyupRequest.cc +++ b/src/librbd/io/CopyupRequest.cc @@ -180,6 +180,7 @@ void CopyupRequest::handle_read_from_parent(int r) { ldout(cct, 20) << "oid=" << m_oid << ", r=" << r << dendl; m_lock.Lock(); + m_copyup_is_zero = m_copyup_data.is_zero(); m_copyup_required = is_copyup_required(); disable_append_requests(); @@ -369,8 +370,8 @@ void CopyupRequest::copyup() { ldout(cct, 20) << "oid=" << m_oid << dendl; bool copy_on_read = m_pending_requests.empty(); - bool deep_copyup = !snapc.snaps.empty() && !m_copyup_data.is_zero(); - if (m_copyup_data.is_zero()) { + bool deep_copyup = !snapc.snaps.empty() && !m_copyup_is_zero; + if (m_copyup_is_zero) { m_copyup_data.clear(); } @@ -522,7 +523,7 @@ bool CopyupRequest::is_copyup_required() { return true; } - if (!m_copyup_data.is_zero()) { + if (!m_copyup_is_zero) { return true; } diff --git a/src/librbd/io/CopyupRequest.h b/src/librbd/io/CopyupRequest.h index c30d5d409cb..55eb5948bcb 100644 --- a/src/librbd/io/CopyupRequest.h +++ b/src/librbd/io/CopyupRequest.h @@ -87,6 +87,7 @@ private: bool m_deep_copy = false; bool m_flatten = false; bool m_copyup_required = true; + bool m_copyup_is_zero = true; ceph::bufferlist m_copyup_data; -- 2.39.5