From: Sage Weil Date: Mon, 8 Feb 2010 19:57:52 +0000 (-0800) Subject: osd: order rmdir in remove_collection after deleting dir contents X-Git-Tag: v0.20~431^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=153a37e7ac3ab4b8abcc767a1f2c5c49559eb034;p=ceph.git osd: order rmdir in remove_collection after deleting dir contents --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 50eddad1e253..74f599742e96 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3511,6 +3511,8 @@ void OSD::_remove_pg(PG *pg) int n = 0; + ObjectStore::Transaction *rmt = new ObjectStore::Transaction; + // snap collections for (set::iterator p = pg->snap_collections.begin(); p != pg->snap_collections.end(); @@ -3537,10 +3539,7 @@ void OSD::_remove_pg(PG *pg) } } } - ObjectStore::Transaction *t = new ObjectStore::Transaction; - t->remove_collection(coll_t::build_snap_pg_coll(pgid, *p)); - int tr = store->queue_transaction(t); - assert(tr == 0); + rmt->remove_collection(coll_t::build_snap_pg_coll(pgid, *p)); } // (what remains of the) main collection @@ -3567,6 +3566,10 @@ void OSD::_remove_pg(PG *pg) } pg->unlock(); + + dout(10) << "_remove_pg " << pgid << " flushing store" << dendl; + store->flush(); + dout(10) << "_remove_pg " << pgid << " taking osd_lock" << dendl; osd_lock.Lock(); pg->lock(); @@ -3580,9 +3583,8 @@ void OSD::_remove_pg(PG *pg) dout(10) << "_remove_pg " << pgid << " removing final" << dendl; { - ObjectStore::Transaction *t = new ObjectStore::Transaction; - t->remove_collection(coll_t::build_pg_coll(pgid)); - int tr = store->queue_transaction(t); + rmt->remove_collection(coll_t::build_pg_coll(pgid)); + int tr = store->queue_transaction(rmt); assert(tr == 0); }