block: Reduce the chance of inconsistency for inflight I/O #22
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.
When reading I/O requests out of a live kernel, there's a pretty good chance that the I/O could complete and the data structure could get freed during the time between when we found the data structure, and when we actually print it.
This means that the list iterators, and the printing functions, all risk reading stale and potentially overwritten data.
We can help reduce the chances of problems with two approaches:
Read the requests into a list ahead of time. This will help avoid the list iterators getting stale data.
Once we have all the requests, dereference the pointer and use .read_() to get a copy of the data that won't change even as the kernel memory changes.
With these two changes, the chance of reading false data is reduced (but not eliminated). It should reduce some flakiness in tests.