]> git.proxmox.com Git - mirror_zfs.git/commit
Add missing dmu_zfetch_fini() in dnode_move_impl()
authorJulian Heuking <JulianH@beckhoff.com>
Fri, 30 Nov 2018 02:20:44 +0000 (11:20 +0900)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 Mar 2019 22:06:55 +0000 (15:06 -0700)
commit304d469dcdcb47a6c4e993a62007a8b7c81a212a
tree61c24cc4bf5c0a946ca87358b73e40d739cc3e04
parent73c25a78e6b420ff37d703d2e1911c17cf449caa
Add missing dmu_zfetch_fini() in dnode_move_impl()

As it turns out, on the Windows platform when rw_init() is called
(rather its bedrock call ExInitializeResourceLite) it is placed on
an active-list of locks, and is removed at rw_destroy() time.

dnode_move() has logic to copy over the old-dnode to new-dnode,
including calling dmu_zfetch_init(new-dnode). But due to the missing
dmu_zfetch_fini(old-dnode), kmem will call dnode_dest() to release the
memory (and in debug builds fill pattern 0xdeadbeef) over the Windows
active-lock's prev/next list pointers, making Windows sad.

But on other platforms, the contents of dmu_zfetch_fini() is one
call to list_destroy() and one to rw_destroy(), which is effectively
a no-op call and is not required. This commit is mostly for
"correctness" and can be skipped there.

Porting Notes:
* This leak exists on Linux but currently can never happen because
  the dnode_move() functionality is not supported.

openzfsonosx-commit: openzfsonosx/zfs@d95fe517

Authored by: Julian Heuking <JulianH@beckhoff.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Matt Ahrens <mahrens@delphix.com>
Signed-off-by: Jorgen Lundman <lundman@lundman.net>
Closes #8519
module/zfs/dnode.c