mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Fix z_teardown_inactive_lock deadlock
When rolling back a mounted filesystem zfs_suspend() is called which acquires the z_teardown_inactive_lock. This lock can not be dropped until the filesystem has been rolled back and resumed in zfs_resume_fs(). Therefore, we must not call iput() under this lock because it may result in the inode->evict() handler being called which also takes this lock. Instead use zfs_iput_async() to ensure dropping the last reference is deferred and runs in a safe context. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #2670
This commit is contained in:
parent
52dd454d05
commit
2d50158343
@ -1009,7 +1009,7 @@ zfs_rezget(znode_t *zp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zp->z_xattr_parent) {
|
if (zp->z_xattr_parent) {
|
||||||
iput(ZTOI(zp->z_xattr_parent));
|
zfs_iput_async(ZTOI(zp->z_xattr_parent));
|
||||||
zp->z_xattr_parent = NULL;
|
zp->z_xattr_parent = NULL;
|
||||||
}
|
}
|
||||||
rw_exit(&zp->z_xattr_lock);
|
rw_exit(&zp->z_xattr_lock);
|
||||||
|
Loading…
Reference in New Issue
Block a user