]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: remove MDSlaveUpdate from list on deletion
authorSage Weil <sage@newdream.net>
Tue, 19 Apr 2011 16:25:30 +0000 (09:25 -0700)
committerSage Weil <sage@newdream.net>
Tue, 19 Apr 2011 16:25:30 +0000 (09:25 -0700)
These are added to the LogSegment list on the slaves, but also need to be
removed from that list when we replay a COMMIT|ROLLBACK or when the op's
fate is determined during the resolve stage.

This fixes a crash like

./include/elist.h: In function 'elist<T>::item::~item() [with T =
MDSlaveUpdate*]', in thread '0x7fb2004d5700'
./include/elist.h: 39: FAILED assert(!is_on_list())
 ceph version 0.26 (commit:9981ff90968398da43c63106694d661f5e3d07d5)
 1: (MDSlaveUpdate::~MDSlaveUpdate()+0x59) [0x4d9fe9]
 2: (ESlaveUpdate::replay(MDS*)+0x422) [0x4d2772]
 3: (MDLog::_replay_thread()+0xb90) [0x67f850]
 4: (MDLog::ReplayThread::entry()+0xd) [0x4b89ed]
 5: (()+0x7971) [0x7fb20564a971]
 6: (clone()+0x6d) [0x7fb2042e692d]
 ceph version 0.26 (commit:9981ff90968398da43c63106694d661f5e3d07d5)
 1: (MDSlaveUpdate::~MDSlaveUpdate()+0x59) [0x4d9fe9]
 2: (ESlaveUpdate::replay(MDS*)+0x422) [0x4d2772]
 3: (MDLog::_replay_thread()+0xb90) [0x67f850]
 4: (MDLog::ReplayThread::entry()+0xd) [0x4b89ed]
 5: (()+0x7971) [0x7fb20564a971]

Fixes: #1019
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/MDCache.h

index 17fc9faee85e63f9b8a39157e7a826b5a4a98654..65982fdf401836949dbc481fdad1ac80c71cca17 100644 (file)
@@ -411,7 +411,9 @@ struct MDSlaveUpdate {
     list.push_back(&item);
   }
   ~MDSlaveUpdate() {
-    if (waiter) waiter->finish(0);
+    item.remove_myself();
+    if (waiter)
+      waiter->finish(0);
     delete waiter;
   }
 };