From 153a37e7ac3ab4b8abcc767a1f2c5c49559eb034 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 8 Feb 2010 11:57:52 -0800 Subject: [PATCH] osd: order rmdir in remove_collection after deleting dir contents --- src/osd/OSD.cc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 50eddad1e2533..74f599742e96b 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); } -- 2.39.5