Peer() uses the osd.timer to schedule the replay interval, which
needs osd_lock.
pg->assemble_backlog(omap);
+ // take osd_lock, map_log (read)
pg->unlock();
+ osd_lock.Lock();
map_lock.get_read();
pg->lock();
if (!pg->generate_backlog_epoch) {
dout(10) << *pg << " generate_backlog aborting" << dendl;
- goto out;
+ goto out2;
}
if (!pg->is_primary()) {
pg->write_log(t);
store->apply_transaction(t);
}
-
+
+ out2:
map_lock.put_read();
+ osd_lock.Unlock();
out:
pg->unlock();