Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
rofiles-fuse: Support breaking hardlinks to fs-verity files
In case fs-verity is in used for the repo objects, and something like "rpm-ostree apply-live" uses rofiles-fuse with --copyup, then writing to a hard-linked file fails to copy up, like this: echo foo > /a/rofile-mnt/a-file /a/rofile-mnt/a-file: Operation not permitted The reason for this is that do_write() starts by opening the file non-truncating for writing, stat:ing it and then calling verify_write_or_copyup(). It is expecting the the open(write) to succeed, however, in the fs-verity case any open with write fails with EPERM. We fix this by delaying the EPERM failure, only reporting it when the file descriptor needs to be used. In the case this triggered a copyup the file descriptor will be reopened, and in this case we will not get the EPERM anymore. To simplify this code the fd variable now uses glnx_autofd. This fixes coreos/rpm-ostree#4827
- Loading branch information