lib/commit: Directly use FICLONE for payload link

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
This commit is contained in:
Jonathan Lebon 2022-08-15 13:54:35 -04:00
parent 4471c252a9
commit 93e47f88f4

View File

@ -881,11 +881,8 @@ _try_clone_from_payload_link (OstreeRepo *self,
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;
}