]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: move object create before set alloc hint
authorOr Ozeri <oro@il.ibm.com>
Sun, 10 Jan 2021 15:55:29 +0000 (17:55 +0200)
committerOr Ozeri <oro@il.ibm.com>
Sun, 10 Jan 2021 15:55:29 +0000 (17:55 +0200)
This commit fixes the order of ops in write requests to have create before set alloc hint, so that exclusive create will not falsely fail

Signed-off-by: Or Ozeri <oro@il.ibm.com>
src/librbd/io/ObjectRequest.cc
src/librbd/io/ObjectRequest.h

index ed420a569250272f2b30ba833fa7d4d2c091b941..866e3c4ddafa97b1a6ec2d70f08a72083fa12129 100644 (file)
@@ -647,12 +647,17 @@ void AbstractObjectWriteRequest<I>::handle_post_write_object_map_update(int r) {
 }
 
 template <typename I>
-void ObjectWriteRequest<I>::add_write_ops(neorados::WriteOp* wr) {
+void ObjectWriteRequest<I>::add_write_hint(neorados::WriteOp* wr) {
   if ((m_write_flags & OBJECT_WRITE_FLAG_CREATE_EXCLUSIVE) != 0) {
     wr->create(true);
   } else if (m_assert_version.has_value()) {
     wr->assert_version(m_assert_version.value());
   }
+  AbstractObjectWriteRequest<I>::add_write_hint(wr);
+}
+
+template <typename I>
+void ObjectWriteRequest<I>::add_write_ops(neorados::WriteOp* wr) {
   if (this->m_full_object) {
     wr->write_full(bufferlist{m_write_data});
   } else {
index 93ad1b9bf88633c55f7a1ea0cda98ca9adbc4fa3..b3223304207e294d126a2a7c3bd017d4b20cf53f 100644 (file)
@@ -280,6 +280,7 @@ public:
 
 protected:
   void add_write_ops(neorados::WriteOp *wr) override;
+  void add_write_hint(neorados::WriteOp *wr) override;
 
 private:
   ceph::bufferlist m_write_data;