From 33aabf27cc91a6788a293f62941debb5ae5cb82f Mon Sep 17 00:00:00 2001 From: xinxin shu Date: Fri, 30 Oct 2015 17:38:16 +0800 Subject: [PATCH] skip copyup if write is write_full Signed-off-by: xinxin shu --- src/librbd/AioRequest.cc | 12 ++++++++++++ src/librbd/AioRequest.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/librbd/AioRequest.cc b/src/librbd/AioRequest.cc index 74c000ce2db3d..421209a1ae779 100644 --- a/src/librbd/AioRequest.cc +++ b/src/librbd/AioRequest.cc @@ -530,6 +530,18 @@ namespace librbd { } wr->set_op_flags2(m_op_flags); } + void AioWrite::send_write() { + bool write_full = (m_object_off == 0 && m_object_len == m_ictx->get_object_size()); + ldout(m_ictx->cct, 20) << "send_write " << this << " " << m_oid << " " + << m_object_off << "~" << m_object_len + << " object exist " << m_object_exist + << " write_full " << write_full << dendl; + if (write_full) { + send_write_op(false); + } else { + AbstractWrite::send_write(); + } + } void AioRemove::guard_write() { // do nothing to disable write guard only if deep-copyup not required diff --git a/src/librbd/AioRequest.h b/src/librbd/AioRequest.h index 2032aef0ba80c..341b3d60b7d43 100644 --- a/src/librbd/AioRequest.h +++ b/src/librbd/AioRequest.h @@ -219,6 +219,7 @@ namespace librbd { virtual void pre_object_map_update(uint8_t *new_state) { *new_state = OBJECT_EXISTS; } + virtual void send_write(); private: ceph::bufferlist m_write_data; -- 2.39.5