Allocate memory for Remove lock using ExAllocatePoolWithTag(). (#360) #95
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.
Issue: As discussed in openzfsonwindows#358, there was a bugcheck when kmem cache re-allocated same memory for IO remove lock.
Cause: zvol_assign_targetid() allocates memory for the IO_REMOVE_LOCK structure from kmem cache. Once it is freed, it can allocate the same cached memory in the next allocation call. This is making the driver verifier to flag that the same IO_REMOVE_LOCK structure is reinitialized second time.
Repro steps:
Create and destroy a zvol multiple times in a loop.
Fix:
Allocated remove lock memory using ExAllocatePoolWithTag(). DV correctly tracks this as a new instance of the remove lock and does not complain.