From: Sage Weil Date: Fri, 8 Aug 2014 00:42:06 +0000 (-0700) Subject: osd: fix pg epoch floor tracking X-Git-Tag: v0.84~24^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a52a855f6c92b03dd84cd0cc1759084f070a98c2;p=ceph.git osd: fix pg epoch floor tracking If you call erase() on a multiset it will delete all instances of a value; we only want to delete one of them. Fix this by passing an iterator. Backport: firefly Signed-off-by: Sage Weil --- diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 4608c0ff59a7..cfbfd120386c 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -351,7 +351,7 @@ public: Mutex::Locker l(pg_epoch_lock); map::iterator t = pg_epoch.find(pgid); assert(t != pg_epoch.end()); - pg_epochs.erase(t->second); + pg_epochs.erase(pg_epochs.find(t->second)); t->second = epoch; pg_epochs.insert(epoch); } @@ -359,7 +359,7 @@ public: Mutex::Locker l(pg_epoch_lock); map::iterator t = pg_epoch.find(pgid); if (t != pg_epoch.end()) { - pg_epochs.erase(t->second); + pg_epochs.erase(pg_epochs.find(t->second)); pg_epoch.erase(t); } }