i.primary = old_acting_primary;
     i.up_primary = old_up_primary;
 
-    if (!i.acting.empty() && i.primary != -1 &&
-       i.acting.size() >=
-       lastmap->get_pools().find(pool_id)->second.min_size) {
+    unsigned num_acting = 0;
+    for (vector<int>::const_iterator p = i.acting.begin(); p != i.acting.end();
+        ++p)
+      if (*p != CRUSH_ITEM_NONE)
+       ++num_acting;
+
+    if (num_acting &&
+       i.primary != -1 &&
+       num_acting >= lastmap->get_pools().find(pgid.pool())->second.min_size) {
       if (out)
        *out << "generate_past_intervals " << i
             << ": not rw,"