From: xinxin shu Date: Thu, 25 Feb 2016 02:31:52 +0000 (+0800) Subject: librbd: skip truncate request if object does not exist X-Git-Tag: v10.1.0~188^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=052075e61f13af0331f7ad0ffe63240d94c92c97;p=ceph.git librbd: skip truncate request if object does not exist Signed-off-by: xinxin shu --- 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 {