fsimpl: Fix Linux rmdir inotify event ordering#13014
Open
copybara-service[bot] wants to merge 1 commit intomasterfrom
Open
fsimpl: Fix Linux rmdir inotify event ordering#13014copybara-service[bot] wants to merge 1 commit intomasterfrom
copybara-service[bot] wants to merge 1 commit intomasterfrom
Conversation
Gradle File System Watching relies on the child watch receiving IN_DELETE_SELF/IN_IGNORED before the parent's IN_DELETE|IN_ISDIR to invalidate its VFS snapshot when a watched directory is removed. Linux does not emit rmdir inotify events with a single unconditional ordering. If the removed directory has no extra references, the child receives IN_DELETE_SELF/IN_IGNORED before the parent's IN_DELETE|IN_ISDIR. If an extra reference remains, such as an open directory FD, Linux still emits the parent's IN_DELETE|IN_ISDIR at rmdir() time and defers the child's IN_DELETE_SELF/IN_IGNORED until the final reference is dropped. Match that behavior across overlay, tmpfs, gofer, and kernfs by eagerly sending child deletion notifications only in the no-extra-ref case, and keeping the parent delete notification on the rmdir path. FUTURE_COPYBARA_INTEGRATE_REVIEW=#12948 from tanyifeng:overlay-rmdir-inotify-order f130e14 PiperOrigin-RevId: 905392574
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
fsimpl: Fix Linux rmdir inotify event ordering
Gradle File System Watching relies on the child watch receiving IN_DELETE_SELF/IN_IGNORED before the parent's IN_DELETE|IN_ISDIR to invalidate its VFS snapshot when a watched directory is removed.
Linux does not emit rmdir inotify events with a single unconditional ordering.
If the removed directory has no extra references, the child receives IN_DELETE_SELF/IN_IGNORED before the parent's IN_DELETE|IN_ISDIR.
If an extra reference remains, such as an open directory FD, Linux still emits the parent's IN_DELETE|IN_ISDIR at rmdir() time and defers the child's IN_DELETE_SELF/IN_IGNORED until the final reference is dropped.
Match that behavior across overlay, tmpfs, gofer, and kernfs by eagerly sending child deletion notifications only in the no-extra-ref case, and keeping the parent delete notification on the rmdir path.
FUTURE_COPYBARA_INTEGRATE_REVIEW=#12948 from tanyifeng:overlay-rmdir-inotify-order f130e14