From: Xinyu Huang Date: Wed, 19 Apr 2023 01:46:31 +0000 (+0000) Subject: crimson/os/seastore: deepcopy the buffer of exist clean extent when duplicate_for_write X-Git-Tag: v19.0.0~929^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=026066a7e5c4cc1bc04ed91003c553146a0b60ef;p=ceph.git crimson/os/seastore: deepcopy the buffer of exist clean extent when duplicate_for_write Beacuse exist clean extent shares buffer with original clean extent. Signed-off-by: Xinyu Huang --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 07000dc8f76e..0b0f5cd332e5 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -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;