openzfsonwindows / openzfs

OpenZFS on Linux and FreeBSD
https://openzfs.github.io/openzfs-docs
Other
455 stars 16 forks source link

Allocate memory for Remove lock using ExAllocatePoolWithTag(). #360

Closed datacore-rm closed 6 months ago

datacore-rm commented 6 months ago

Issue: As discussed in https://github.com/openzfsonwindows/openzfs/issues/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.