mirror of
https://github.com/ceph/ceph
synced 2024-12-29 15:03:33 +00:00
0d98fc6ffd
Call start_recovery_op from pull() instead of fixing every caller (some were wrong). This keeps the recovery state in sync with pulling state, even when pull() has to pull something different (head, snapdir) first. Fixes this crash: osd/PG.cc: In function 'void PG::finish_recovery_op(const sobject_t&, bool)': osd/PG.cc:1842: FAILED assert(recovering_oids.count(soid)) 1: (PG::finish_recovery_op(sobject_t const&, bool)+0x14e) [0x74caf6] 2: (ReplicatedPG::sub_op_push(MOSDSubOp*)+0x1da8) [0x669292] 3: (ReplicatedPG::do_sub_op(MOSDSubOp*)+0x109) [0x671a73] 4: (OSD::dequeue_op(PG*)+0x23c) [0x6bda00] 5: (OSD::OpWQ::_process(PG*)+0x21) [0x7387c9] 6: (ThreadPool::WorkQueue<PG>::_void_process(void*)+0x28) [0x6f5e12] 7: (ThreadPool::worker()+0x23a) [0x7f2404] 8: (ThreadPool::WorkThread::entry()+0x19) [0x73b783] 9: (Thread::_entry_func(void*)+0x20) [0x64f92a] 10: /lib/libpthread.so.0 [0x7f7a12cf473a] 11: (clone()+0x6d) [0x7f7a11f1e69d] |
||
---|---|---|
.. | ||
Ager.cc | ||
Ager.h | ||
ObjectVersioner.h | ||
osd_types.h | ||
OSD.cc | ||
OSD.h | ||
OSDCaps.cc | ||
OSDCaps.h | ||
OSDMap.cc | ||
OSDMap.h | ||
PG.cc | ||
PG.h | ||
PGLS.h | ||
RAID4PG.cc | ||
RAID4PG.h | ||
ReplicatedPG.cc | ||
ReplicatedPG.h |