We were using item_exists(), which simply checks if we have a name defined
for the item. Instead, use _search_item_exists(), which looks for an
instance of the item somewhere in the hierarchy. This matches what
get_item_weightf() is doing, which ensures we get a non-negative weight
that converts properly to floating point.
Backport: giant, firefly
Fixes: #9998
Reported-by: Pawel Sadowski <ceph@sadziu.pl>
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit
9902383c690dca9ed5ba667800413daa8332157e)
if (check_item_loc(cct, item, loc, &old_iweight)) {
ldout(cct, 5) << "create_or_move_item " << item << " already at " << loc << dendl;
} else {
- if (item_exists(item)) {
+ if (_search_item_exists(item)) {
weight = get_item_weightf(item);
ldout(cct, 10) << "create_or_move_item " << item << " exists with weight " << weight << dendl;
remove_item(cct, item, true);