]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #70025 from tchaikov/wip-seastore-force-rewrite-conflict
authorMatan Breizman <mbreizma@redhat.com>
Mon, 3 Aug 2026 16:07:07 +0000 (19:07 +0300)
committerGitHub <noreply@github.com>
Mon, 3 Aug 2026 16:07:07 +0000 (19:07 +0300)
crimson/os/seastore: don't let a later rewrite reset force_rewrite_conflict

Reviewed-by: Matan Breizman <mbreizma@redhat.com>
Reviewed-by: Xuehan Xu <xuxuehan@qianxin.com>
1  2 
src/crimson/os/seastore/transaction_manager.cc

index 4d0803a585989d7aaf8f501d9e1fdefd0e621817,c36d1b7dbc93da2a86c5af0be39b8a7d5e4a9af4..1d1ceeb1b4e4d0427268474d592ef8590f18c99b
@@@ -1043,11 -785,11 +1043,12 @@@ TransactionManager::rewrite_logical_ext
      // the LBA update likely involves insertions/splits (structural
      // btree changes), which the no-conflict publish-to-prior path
      // does not currently cover safely. Fall back to optimistic
-     // conflict handling.
-     t.force_rewrite_conflict = (extents.size() > 1);
+     // conflict handling. a batch transaction rewrites many extents,
+     // and any structural rewrite taints them all.
+     t.force_rewrite_conflict |= (extents.size() > 1);
      for (auto &_nextent : extents) {
        auto nextent = _nextent->template cast<LogicalChildNode>();
 +      assert(nextent->get_write_policy() != write_policy_t::WRITE_THROUGH);
        bool first_extent = (off == 0);
        ceph_assert(left >= nextent->get_length());
        nextent->rewrite(t, *extent, off);