void PG::requeue_ops(list<OpRequestRef> &ls)
{
+ if (!waiting_for_readable.empty() && &ls != &waiting_for_peered &&
+ &ls != &waiting_for_flush && &ls != &waiting_for_active &&
+ &ls != &waiting_for_readable) {
+ dout(20) << __func__ << " not readable ops (count=" << ls.size() << ")"
+ << dendl;
+ for (auto& op : ls) {
+ op->mark_delayed("waiting for readable");
+ }
+ waiting_for_readable.splice(waiting_for_readable.begin(), ls);
+ }
+
for (list<OpRequestRef>::reverse_iterator i = ls.rbegin();
i != ls.rend();
++i) {
if (!to_req.empty()) {
// requeue at front of scrub blocking queue if we are blocked by scrub
- for (auto &&p: to_req) {
+ for (auto&& p : to_req) {
if (m_scrubber->write_blocked_by_scrub(p.first->obs.oi.soid.get_head())) {
for (auto& op : p.second) {
op->mark_delayed("waiting for scrub");
}
-
- waiting_for_scrub.splice(
- waiting_for_scrub.begin(),
- p.second,
- p.second.begin(),
- p.second.end());
- } else if (is_laggy()) {
- for (auto& op : p.second) {
- op->mark_delayed("waiting for readable");
- }
- waiting_for_readable.splice(
- waiting_for_readable.begin(),
- p.second,
- p.second.begin(),
- p.second.end());
+ waiting_for_scrub.splice(waiting_for_scrub.begin(), p.second);
} else {
- requeue_ops(p.second);
+ requeue_ops(p.second);
}
}
}