From 052075e61f13af0331f7ad0ffe63240d94c92c97 Mon Sep 17 00:00:00 2001 From: xinxin shu Date: Thu, 25 Feb 2016 10:31:52 +0800 Subject: [PATCH] librbd: skip truncate request if object does not exist Signed-off-by: xinxin shu --- src/librbd/AioObjectRequest.cc | 11 +++++++++++ src/librbd/AioObjectRequest.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/librbd/AioObjectRequest.cc b/src/librbd/AioObjectRequest.cc index 96669eadbe472..cfd1c1e31fc51 100644 --- a/src/librbd/AioObjectRequest.cc +++ b/src/librbd/AioObjectRequest.cc @@ -575,4 +575,15 @@ namespace librbd { << m_object_off << "~" << m_object_len << dendl; send_write_op(true); } + void AioObjectTruncate::send_write() { + ldout(m_ictx->cct, 20) << "send_write " << this << " " << m_oid + << " truncate " << m_object_off << dendl; + if (!m_object_exist && ! has_parent()) { + m_state = LIBRBD_AIO_WRITE_FLAT; + Context *ctx = util::create_context_callback(this); + m_ictx->op_work_queue->queue(ctx, 0); + } else { + AbstractAioObjectWrite::send_write(); + } + } } diff --git a/src/librbd/AioObjectRequest.h b/src/librbd/AioObjectRequest.h index be9ba70cd13d7..2e9226e9a2108 100644 --- a/src/librbd/AioObjectRequest.h +++ b/src/librbd/AioObjectRequest.h @@ -323,6 +323,7 @@ namespace librbd { else *new_state = OBJECT_EXISTS; } + virtual void send_write(); }; class AioObjectZero : public AbstractAioObjectWrite { -- 2.39.5