The idea of payload linking is to reflink between objects where
possible. Instead of relying on `glnx_regfile_copy_bytes` to hit the
`FICLONE` path, just call `FICLONE` directly. At that point in the code,
we've already established that the source and dest repos are on the same
filesystem and that it supports `FICLONE`.
Related: https://gitlab.gnome.org/GNOME/libglnx/-/merge_requests/41
Related: https://github.com/ostreedev/ostree/pull/2684#issuecomment-
1204068437
else
{
/* This undoes all of the previous writes; we want to generate reflinked data. */
- if (ftruncate (tmpf->fd, 0) < 0)
- return glnx_throw_errno_prefix (error, "ftruncate");
-
- if (glnx_regfile_copy_bytes (fdf, tmpf->fd, -1) < 0)
- return glnx_throw_errno_prefix (error, "regfile copy");
+ if (ioctl (tmpf->fd, FICLONE, fdf) < 0)
+ return glnx_throw_errno_prefix (error, "FICLONE");
return TRUE;
}