If we are adding an item, ensure it cannot form a loop in the tree/map/
DAG.
Signed-off-by: Sage Weil <sage@inktank.com>
return -EEXIST;
}
+ // are we forming a loop?
+ if (subtree_contains(cur, b->id)) {
+ ldout(cct, 1) << "insert_item " << cur << " already contains " << b->id
+ << "; cannot form loop" << dendl;
+ return -ELOOP;
+ }
+
ldout(cct, 5) << "insert_item adding " << cur << " weight " << weight
<< " to bucket " << id << dendl;
int r = crush_bucket_add_item(b, cur, 0);