Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What is the purpose of this change? What does it change?
The O_NOATIME flag is set when opening a file on Linux, which prevents the access time from being updated on every read.
Citing Kerrisk, The Linux Programming Interface:
Was the change discussed in an issue or in the forum before?
restic used to do this, but the functionality was removed along with the fadvise call in #670. That solved #666, which is unrelated to O_NOATIME.
The implementation here is different: it uses fcntl, so we don't need to open the file twice when an error occurs (leading to duplicate path traversals). Errors are expected to be common, as O_NOATIME is only available to the owner of a file or root. Also, fcntl can set O_DIRECT on FreeBSD and is needed to set F_NOCACHE on MacOS, in case we ever want to do that.
Checklist
changelog/unreleased/
that describes the changes for our users (template here)gofmt
on the code in all commits