r = -ENOENT;
goto out;
}
-
- newo = c->get_onode(new_oid, false);
- if (newo) {
- // already exist, truncate any old data
- r = _do_truncate(txc, newo, 0);
- if (r < 0)
- goto out;
- } else {
- // does not exist, create it
- newo = c->get_onode(new_oid, true);
- _assign_nid(txc, newo);
- }
+ newo = c->get_onode(new_oid, true);
+ assert(newo);
+ newo->exists = true;
+ _assign_nid(txc, newo);
r = _do_read(oldo, 0, oldo->onode.size, bl, 0);
if (r < 0)
goto out;
+ // truncate any old data
+ r = _do_truncate(txc, newo, 0);
+ if (r < 0)
+ goto out;
+
r = _do_write(txc, newo, 0, oldo->onode.size, bl, 0);
newo->onode.attrs = oldo->onode.attrs;