summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-02-19 22:20:47 -0800
committerSage Weil <sage@inktank.com>2013-02-20 10:22:48 -0800
commit2e1b02bf0117995932dc5723c70ddec628d375c2 (patch)
treec6c681e8d80d9286c53858fb095e9de002a52c3f
parentdb99fb4417b87301a69cb37b00c35c838b77197e (diff)
downloadceph-2e1b02bf0117995932dc5723c70ddec628d375c2.tar.gz
osd: lock pg in build_past_intervals_parallel()
Methods called by write_if_dirty() (get_osdmap()) assert that the pg is locked. Backport: bobtail Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/osd/OSD.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index d5f2b2299a4..19e016f93a5 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -1743,9 +1743,11 @@ void OSD::build_past_intervals_parallel()
int num = 0;
for (map<PG*,pistate>::iterator i = pis.begin(); i != pis.end(); ++i) {
PG *pg = i->first;
+ pg->lock();
pg->dirty_big_info = true;
pg->dirty_info = true;
pg->write_if_dirty(t);
+ pg->unlock();
// don't let the transaction get too big
if (++num >= g_conf->osd_target_transaction_size) {