ReplicatedPG::release_op_ctx_locks: requeue in scrub queue if blocked

Otherwise we can reorder an op around another op which got blocked by a
scrub which started after the first blocked on an obc.

Fixes: #11691
Signed-off-by: Samuel Just <sjust@redhat.com>
This commit is contained in:
Samuel Just 2015-05-20 16:10:02 -07:00
parent 5c2b795724
commit be873eb8da

View File

@ -866,7 +866,20 @@ protected:
requeue_snaptrimmer_clone ||
requeue_snaptrimmer_snapset)
queue_snap_trim();
requeue_ops(to_req);
if (!to_req.empty()) {
assert(ctx->obc);
// requeue at front of scrub blocking queue if we are blocked by scrub
if (scrubber.write_blocked_by_scrub(ctx->obc->obs.oi.soid.get_head())) {
waiting_for_active.splice(
waiting_for_active.begin(),
to_req,
to_req.begin(),
to_req.end());
} else {
requeue_ops(to_req);
}
}
}
// replica ops