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 problem are we solving?
This fixes a race condition in which multiple Goroutines release and acquire locks for the same file. Because the lock entries in the lock table and the counters in the lock entries themselves are independent and not synchronized, it can happen that two Goroutines acquire a lock and a third Goroutine releases the same lock in between them, leading to two lock entries being created. Those two lock entries would now wait forever on entry.cond.Wait() and can't proceed.
How are we solving the problem?
The fix is to track the locks that are in flight in the lock table itself, so that it knows when it is safe to release a lock before creating a second instance.
How is the PR tested?
The
FUSE Mount
step in the e2e workflow is failing. This PR should fix it and make it succeed again.Checks