Bail out of generate_backlog if we've been canceled. Fixes
osd/OSD.cc: In function 'void OSD::generate_backlog(PG*)':
osd/OSD.cc:3305: FAILED assert(!pg->is_active())
1: ./cosd(_Z18__ceph_assert_failPKcS0_iS0_+0x3a) [0x7a833b]
2: ./cosd(_ZN3OSD16generate_backlogEP2PG+0xb6) [0x69a1a6]
3: ./cosd(_ZN3OSD9BacklogWQ8_processEP2PG+0x21) [0x70d92b]
4: ./cosd(_ZN10ThreadPool9WorkQueueI2PGE13_void_processEPv+0x28) [0x6ca5f8]
5: ./cosd(_ZN10ThreadPool6workerEv+0x280) [0x7a8efc]
6: ./cosd(_ZN10ThreadPool10WorkThread5entryEv+0x19) [0x70d331]
7: ./cosd(_ZN6Thread11_entry_funcEPv+0x20) [0x629e48]
8: /lib/libpthread.so.0 [0x7f0a8feed3f7]
9: /lib/libc.so.6(clone+0x6d) [0x7f0a8f4bc94d]
void OSD::generate_backlog(PG *pg)
{
+ map<eversion_t,PG::Log::Entry> omap;
pg->lock();
dout(10) << *pg << " generate_backlog" << dendl;
+
+ if (!pg->generate_backlog_epoch) {
+ dout(10) << *pg << " generate_backlog was canceled" << dendl;
+ goto out;
+ }
+
assert(!pg->is_active());
- map<eversion_t,PG::Log::Entry> omap;
if (!pg->build_backlog_map(omap))
goto out;