From 1ce4b1b41759becac8de82f3444d8ea4316cecf7 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Fri, 8 Nov 2024 00:30:39 +0300 Subject: [PATCH] Fix stop condition in osd_flush Could probably lead to PGs hung in peering states on OSD restart in EC pools, fixable by primary OSD restart --- src/osd/osd_flush.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/osd/osd_flush.cpp b/src/osd/osd_flush.cpp index 6b255525..d54292e0 100644 --- a/src/osd/osd_flush.cpp +++ b/src/osd/osd_flush.cpp @@ -13,10 +13,11 @@ void osd_t::submit_pg_flush_ops(pg_t & pg) bool first = true; while (it != pg.flush_actions.end()) { - if (!first && (it->first.oid.inode != prev_it->first.oid.inode || - (it->first.oid.stripe & ~STRIPE_MASK) != (prev_it->first.oid.stripe & ~STRIPE_MASK)) && - fb->rollback_lists[it->first.osd_num].size() >= FLUSH_BATCH || - fb->stable_lists[it->first.osd_num].size() >= FLUSH_BATCH) + if (!first && + (it->first.oid.inode != prev_it->first.oid.inode || + (it->first.oid.stripe & ~STRIPE_MASK) != (prev_it->first.oid.stripe & ~STRIPE_MASK)) && + (fb->rollback_lists[it->first.osd_num].size() >= FLUSH_BATCH || + fb->stable_lists[it->first.osd_num].size() >= FLUSH_BATCH)) { // Stop only at the object boundary break;