]> git.proxmox.com Git - mirror_zfs.git/commit
Fix dnode_hold_impl() soft lockup
authorlidongyang <gnaygnodil@gmail.com>
Fri, 22 Feb 2019 17:48:37 +0000 (04:48 +1100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 22 Feb 2019 17:48:37 +0000 (09:48 -0800)
commit8d9e51c084805237a36420e6cdcd8e2e9801a7cf
tree250c85d7ccbcf69cbb09b0ce1cddc2c188be4a68
parentf8bb2a7e0c889d6c5cf7655d698869b3a32c2bb0
Fix dnode_hold_impl() soft lockup

Soft lockups could happen when multiple threads trying
to get zrl on the same dnode handle in order to allocate
and initialize the dnode marked as DN_SLOT_ALLOCATED.

Don't loop from beginning when we can't get zrl, otherwise
we would increase the zrl refcount and nobody can actually
lock it.

Reviewed by: Tom Caputi <tcaputi@datto.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Li Dongyang <dongyangli@ddn.com>
Closes #8433
include/sys/zfs_context.h
module/zfs/dnode.c