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: v18.2.1~165^2~4 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=6448732f3997624462a33bce1294856d1e694840;p=ceph-ci.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 (cherry picked from commit 026066a7e5c4cc1bc04ed91003c553146a0b60ef) --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 255f0c26237..91f7794f750 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;