]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: only adjust osd scrub_pending if pg was reserved
authorSage Weil <sage@newdream.net>
Wed, 1 Dec 2010 00:50:25 +0000 (16:50 -0800)
committerSage Weil <sage@newdream.net>
Wed, 1 Dec 2010 00:50:25 +0000 (16:50 -0800)
If for some reason we enter scrub() without scrub_reserved == true, don't
adjust the osd->scrubs_pending or we'll screw up the accounting.

Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/PG.cc

index 91d78eeaace7e4b6cac836959f2bb99f1b58fd8f..923fbad83ce3eedf33c25e0b4a6057b663d927e5 100644 (file)
@@ -3095,14 +3095,15 @@ void PG::scrub()
   update_stats();
 
   osd->sched_scrub_lock.Lock();
-  --(osd->scrubs_pending);
-  assert(osd->scrubs_pending >= 0);
+  if (scrub_reserved) {
+    --(osd->scrubs_pending);
+    assert(osd->scrubs_pending >= 0);
+    scrub_reserved = false;
+    scrub_reserved_peers.clear();
+  }
   ++(osd->scrubs_active);
   osd->sched_scrub_lock.Unlock();
 
-  scrub_reserved = false;
-  scrub_reserved_peers.clear();
-
   // request maps from replicas
   for (unsigned i=1; i<acting.size(); i++) {
     _request_scrub_map(acting[i], eversion_t());