From: Ilya Dryomov Date: Mon, 22 Apr 2019 10:12:33 +0000 (+0200) Subject: librbd: avoid repeatedly invoking is_zero() in CopyupRequest X-Git-Tag: v15.1.0~2823^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b01133661e3bc1814f66df3de70aefd005965b27;p=ceph.git 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 --- 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;