]> granicus.if.org Git - zfs/commit
Fix fail path in zfs_znode_alloc
authorChunwei Chen <david.chen@osnexus.com>
Fri, 9 Oct 2015 19:27:01 +0000 (12:27 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 13 Oct 2015 22:57:17 +0000 (15:57 -0700)
commit07d63f0cb953b7a0e5a88820e7cc2341d6e1d79e
tree0c3d7ef4e7755ed62b4d44513c512683e16d5703
parentaa159afb568fff01bb9f427c16b406c5d29664c7
Fix fail path in zfs_znode_alloc

When sa_bulk_lookup() fails, unlock_new_inode() will spit out a WARNING. It
will also recursive deadlock on ZFS_OBJ_HOLD_ENTER in zfs_zinactive().

Since we never call insert_inode_locked in fail path, I_NEW is never set, the
inode is never hashed. So unlock_new_inode() can be safely remove it.

We set z_sa_hdl to NULL in fail path so that iput path will stop at
zfs_inactive() without entering zfs_zinactive(). This way we can avoid the
deadlock and prevent double sa_handle_destroy().

Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #3899
module/zfs/zfs_znode.c