diff options
author | Rohan Puri <[email protected]> | 2018-07-28 18:32:12 +0530 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2018-08-01 15:00:02 -0700 |
commit | fd7265c646f40e364396af5014bbb83e809e124a (patch) | |
tree | 4f4d7f280ce699992cbb0224a2951c2eb101d0d4 /module/zfs/dnode_sync.c | |
parent | 492f64e941e3d6b947d1cc387a1a380c0c738b09 (diff) |
Fix deadlock between zfs umount & snapentry_expire
zfs umount -> zfsctl_destroy() takes the zfs_snapshot_lock as a
writer and calls zfsctl_snapshot_unmount_cancel(), which waits
for snapentry_expire() if present (when snap is automounted).
This snapentry_expire() itself then waits for zfs_snapshot_lock
as a reader, resulting in a deadlock.
The fix is to only hold the zfs_snapshot_lock over the tree
lookup and removal. After a successful lookup the lock can
be dropped and zfs_snapentry_t will remain valid until the
reference taken by the lookup is released.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Rohan Puri <[email protected]>
Closes #7751
Closes #7752
Diffstat (limited to 'module/zfs/dnode_sync.c')
0 files changed, 0 insertions, 0 deletions