]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: abort generate_backlog if already canceled
authorSage Weil <sage@newdream.net>
Wed, 24 Jun 2009 18:12:03 +0000 (11:12 -0700)
committerSage Weil <sage@newdream.net>
Wed, 24 Jun 2009 18:12:03 +0000 (11:12 -0700)
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]

src/osd/OSD.cc

index 48f8657a8ec51d2e39ea11b0e6f9f86186e8736c..f02da357fa337a7e82e80317990ae13f471a6711 100644 (file)
@@ -3300,11 +3300,17 @@ void OSD::cancel_generate_backlog(PG *pg)
 
 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;