]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: deepcopy the buffer of exist clean extent when duplicate_for_write
authorXinyu Huang <xinyu.huang@intel.com>
Wed, 19 Apr 2023 01:46:31 +0000 (01:46 +0000)
committerXinyu Huang <xinyu.huang@intel.com>
Tue, 4 Jul 2023 09:07:13 +0000 (17:07 +0800)
Beacuse exist clean extent shares buffer with original clean extent.

Signed-off-by: Xinyu Huang <xinyu.huang@intel.com>
src/crimson/os/seastore/cache.cc

index 07000dc8f76e22e872fdf56a44fdb03067c171fd..0b0f5cd332e5c0412f20bb5cf499726206328f56 100644 (file)
@@ -1012,6 +1012,12 @@ CachedExtentRef Cache::duplicate_for_write(
     i->version++;
     i->state = CachedExtent::extent_state_t::EXIST_MUTATION_PENDING;
     i->last_committed_crc = i->get_crc32c();
+    // deepcopy the buffer of exist clean extent beacuse it shares
+    // buffer with original clean extent.
+    auto bp = i->get_bptr();
+    auto nbp = ceph::bufferptr(bp.c_str(), bp.length());
+    i->set_bptr(std::move(nbp));
+
     t.add_mutated_extent(i);
     DEBUGT("duplicate existing extent {}", t, *i);
     return i;