Avoid creating a new destination onode in advance, which is unnecessary and less efficient.
Fixes: #14433
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
r = -ENOENT;
goto out;
}
- newo = c->get_onode(new_oid, true);
- assert(newo);
- if (newo->exists) {
+ newo = c->get_onode(new_oid, false);
+ if (newo && newo->exists) {
+ // destination object already exists, remove it first
r = _do_remove(txc, newo);
if (r < 0)
- return r;
+ goto out;
}
txc->t->rmkey(PREFIX_OBJ, oldo->key);