mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-01-15 17:52:05 +03:00
Multiple threads racing to automount the same snapshot can both spawn mount helper processes that successfully complete, causing both parent threads to attempt AVL tree registration and triggering a VERIFY() panic in avl_add(). This occurs because the fsconfig/fsmount API lacks the serialization provided by traditional mount() via lock_mount(). The fix adds a per-entry mutex (se_mtx) to zfs_snapentry_t that serializes mount and unmount operations on the same snapshot. The first mount thread creates a pending entry with se_spa=NULL and holds se_mtx during the helper execution. Concurrent mounts find the pending entry and return success without spawning duplicate helpers. Unmount waits on se_mtx if a mount is pending, ensuring proper serialization. This allows different snapshots to mount in parallel while preventing the AVL panic. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Signed-off-by: Ameer Hamza <ahamza@ixsystems.com> Closes #17943 |
||
|---|---|---|
| .. | ||
| abd_os.c | ||
| arc_os.c | ||
| kasan_compat.c | ||
| mmp_os.c | ||
| policy.c | ||
| qat_compress.c | ||
| qat_crypt.c | ||
| qat.c | ||
| spa_misc_os.c | ||
| trace.c | ||
| vdev_disk.c | ||
| vdev_label_os.c | ||
| vdev_raidz.c | ||
| zfs_acl.c | ||
| zfs_ctldir.c | ||
| zfs_debug.c | ||
| zfs_dir.c | ||
| zfs_file_os.c | ||
| zfs_ioctl_os.c | ||
| zfs_racct.c | ||
| zfs_sysfs.c | ||
| zfs_uio.c | ||
| zfs_vfsops.c | ||
| zfs_vnops_os.c | ||
| zfs_znode_os.c | ||
| zio_crypt.c | ||
| zpl_ctldir.c | ||
| zpl_export.c | ||
| zpl_file_range.c | ||
| zpl_file.c | ||
| zpl_inode.c | ||
| zpl_super.c | ||
| zpl_xattr.c | ||
| zvol_os.c | ||