FreeNAS/freenas 3087ceasrc/middlewared/middlewared/plugins/pool_ snapshot.py, src/middlewared/middlewared/plugins/zfs snapshot_crud.py exceptions.py

Refuse snapshot rollback up front when newer snapshots are blocked

## Problem
Rolling a dataset back to an older snapshot crashed with a raw traceback whenever a newer snapshot had a dependent clone. Two separate failures were in play: `clone_rsrc.destroy()` does not exist on any pylibzfs resource type, so it raised `AttributeError`, which is not a `RuntimeError` and so escaped both surrounding handlers; and `lzc.destroy_snapshots()` raises `ZFSCoreException`, a sibling of `ZFSException` rather than a subclass, so the handler wrapping it never fired. There was also no pre-flight of any kind, so nothing could refuse cleanly — and because destroy failures were silently swallowed and the loop continued, a failed destroy left the rollback to fail later with a message telling the user to pass a flag they had already passed.

## Solution
- **Destroy clones through the handle.** `tls.lzh.destroy_resource(name=...)` replaces the non-existent resource-level `destroy()`, matching how the destroy path already does it.
- **Catch both exception families.** `lzc.destroy_snapshots()` failures are now caught alongside `ZFSException` and converted, rather than escaping as a raw traceback.
- **Refuse before destroying anything.** A new pre-flight walks the whole dataset set — including the full `recursive_rollback` tree, before the fan-out loop rather than inside it — and collects every blocker it can see: dependent clones when `recursive_clones` is not set, holds in all cases, and clones that cannot be destroyed non-recursively because they have children or snapshots of their own. Previously a blocker on a child was discovered only after the parent had been irreversibly rolled back. This is fail-first, not atomic: a clone or hold created between the pre-flight and the destroy still fails mid-loop, and only a concurrently pruned snapshot (ENOENT) is tolerated.
- **Typed errors at both boundaries.** Blockers raise `ZFSRollbackBlockedException`, mapped to `EBUSY` with a message naming each blocking snapshot and what blocks it. `pool.snapshot.rollback` had no exception mapping at all and leaked every impl failure as an untyped traceback; it now mirrors `zfs.resource.snapshot.rollback`.
- **`force` now means how forcefully, not whether.** Clones are always unmounted before destroy, since `zfs_destroy()` does not unmount and a mounted clone could never be destroyed otherwise; `force` selects a forced unmount, matching the `zfs destroy` CLI. Unmount no longer requests a key unload, matching what the CLI's rollback path does.

Adds unit coverage for each defect and the pre-flight, plus integration coverage for clone-present, nested-clone, hold-present, and cross-dataset cases. `pool.snapshot.rollback` had no api2 coverage before this.

Newer bookmarks remain unhandled: pylibzfs exposes no bookmark primitives, so a newer bookmark still fails the rollback with an empty conflict list. That needs a pylibzfs change first and is tracked separately.
DeltaFile
+279-1tests/api2/test_zfs_resource_snapshot_rollback.py
+187-51src/middlewared/middlewared/plugins/zfs/snapshot_rollback_impl.py
+80-0tests/api2/test_pool_snapshot_rollback.py
+62-1src/middlewared/middlewared/plugins/zfs/exceptions.py
+24-9src/middlewared/middlewared/plugins/zfs/snapshot_crud.py
+21-6src/middlewared/middlewared/plugins/pool_/snapshot.py
+653-686 files

OPNSense/core 24b997esrc/opnsense/mvc/app/views/layout_partials base_form.volt

mvc: fix typo in base_form.volt advanced/help toggle ids (#10734)
DeltaFile
+2-2src/opnsense/mvc/app/views/layout_partials/base_form.volt
+2-21 files

LLVM/project b8309c6utils/bazel/llvm-project-overlay/mlir BUILD.bazel, utils/bazel/llvm-project-overlay/mlir/test BUILD.bazel

[mlir:bazel] Expose "expsensive pattern API checks" as build flag. (#216673)

This PR exposes the `MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS`
definition as a build flag in the Bazel build. This makes it more easy
to run these expensive checks as a CI task. The new flag can be used as
follows:

```
bazelisk build \
    --@llvm-project//mlir:enable_expensive_pattern_api_checks \
    ${BUILD_TARGETS}
```

Signed-off-by: Ingo Müller <ingomueller at google.com>
DeltaFile
+18-2utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+8-1utils/bazel/llvm-project-overlay/mlir/test/BUILD.bazel
+26-32 files

LLVM/project 426be1ellvm/lib/Transforms/Vectorize VPlanConstruction.cpp, llvm/test/Transforms/LoopVectorize compress-idioms.ll

Fix crash
DeltaFile
+143-0llvm/test/Transforms/LoopVectorize/compress-idioms.ll
+9-3llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+152-32 files

LLVM/project 47c970fllvm/lib/CodeGen/GlobalISel IRTranslator.cpp

[𝘀𝗽𝗿] changes to main this commit is based on

Created using spr 1.3.7

[skip ci]
DeltaFile
+2-3llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+2-31 files

LLVM/project a07e3fallvm/include/llvm/CodeGen/GlobalISel Legalizer.h, llvm/lib/CodeGen/GlobalISel IRTranslator.cpp Legalizer.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+72-28llvm/lib/CodeGen/GlobalISel/Legalizer.cpp
+35-17llvm/include/llvm/CodeGen/GlobalISel/Legalizer.h
+3-3llvm/unittests/CodeGen/GlobalISel/LegalizerTest.cpp
+2-3llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+2-2llvm/test/CodeGen/MIR/AArch64/deactivation-symbols.mir
+1-1llvm/lib/Target/X86/X86TargetMachine.cpp
+115-5413 files not shown
+128-6619 files

LLVM/project a1a534cllvm/test/CodeGen/SPIRV/linkage weak-linkage.ll

[NFC][SPIR-V] Enable spirv-val for SPV_AMD_weak_linkage test (#216316)

WeakLinkageAMD is now defined in SPIR-V Headers:
https://github.com/KhronosGroup/SPIRV-Headers/pull/583
DeltaFile
+1-2llvm/test/CodeGen/SPIRV/linkage/weak-linkage.ll
+1-21 files

LLVM/project 82cfac2llvm/lib/CodeGen/GlobalISel IRTranslator.cpp

[𝘀𝗽𝗿] initial version

Created using spr 1.3.7
DeltaFile
+2-3llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+2-31 files

LLVM/project 025da4amlir/include/mlir/Dialect/Linalg/Transforms Transforms.h

[mlir] Remove dead declaration populateSparseTensorRewriting (#216942)

The corresponding function definition was removed on July 15, 2022 in
commit 28ebb0b61d110e4b108fc1ebcbc43d50fff8f087.
DeltaFile
+0-3mlir/include/mlir/Dialect/Linalg/Transforms/Transforms.h
+0-31 files

FreeBSD/ports bb862b9graphics/py-exiv2 distinfo Makefile, graphics/py-exiv2/files patch-tests_test__value.py patch-pyproject.toml

graphics/py-exiv2: Update 0.18.1 => 0.19.0, take maintainership

Changelog:
1/ Add exiv2.XmpParser.encode() to Python interface.
2/ Fix crash when getting strings of malformed values.
3/ Python 3.15 compatibility.
https://github.com/jim-easterbrook/python-exiv2/releases/tag/0.19.0
https://github.com/jim-easterbrook/python-exiv2/blob/0.19.0/CHANGELOG.txt

- Add STRIP_CMD in post-install.

PR:             297603
Sponsored by:   UNIS Labs
Co-authored-by: Vladimir Druzenko <vvd at FreeBSD.org>
MFH:            2026Q3

(cherry picked from commit 59d9d76281846c9e3427ebecd3da6b28aea5f631)
DeltaFile
+20-0graphics/py-exiv2/files/patch-pyproject.toml
+6-3graphics/py-exiv2/Makefile
+3-3graphics/py-exiv2/distinfo
+2-2graphics/py-exiv2/files/patch-tests_test__value.py
+31-84 files

FreeBSD/ports 59d9d76graphics/py-exiv2 distinfo Makefile, graphics/py-exiv2/files patch-tests_test__value.py patch-pyproject.toml

graphics/py-exiv2: Update 0.18.1 => 0.19.0, take maintainership

Changelog:
1/ Add exiv2.XmpParser.encode() to Python interface.
2/ Fix crash when getting strings of malformed values.
3/ Python 3.15 compatibility.
https://github.com/jim-easterbrook/python-exiv2/releases/tag/0.19.0
https://github.com/jim-easterbrook/python-exiv2/blob/0.19.0/CHANGELOG.txt

- Add STRIP_CMD in post-install.

PR:             297603
Sponsored by:   UNIS Labs
Co-authored-by: Vladimir Druzenko <vvd at FreeBSD.org>
MFH:            2026Q3
DeltaFile
+20-0graphics/py-exiv2/files/patch-pyproject.toml
+6-3graphics/py-exiv2/Makefile
+3-3graphics/py-exiv2/distinfo
+2-2graphics/py-exiv2/files/patch-tests_test__value.py
+31-84 files

FreeNAS/freenas e06d404src/middlewared/middlewared/plugins/pool_ snapshot.py, src/middlewared/middlewared/plugins/zfs snapshot_crud.py exceptions.py

Refuse snapshot rollback up front when newer snapshots are blocked

## Problem
Rolling a dataset back to an older snapshot crashed with a raw traceback whenever a newer snapshot had a dependent clone. Two separate failures were in play: `clone_rsrc.destroy()` does not exist on any pylibzfs resource type, so it raised `AttributeError`, which is not a `RuntimeError` and so escaped both surrounding handlers; and `lzc.destroy_snapshots()` raises `ZFSCoreException`, a sibling of `ZFSException` rather than a subclass, so the handler wrapping it never fired. There was also no pre-flight of any kind, so nothing could refuse cleanly — and because destroy failures were silently swallowed and the loop continued, a failed destroy left the rollback to fail later with a message telling the user to pass a flag they had already passed.

## Solution
- **Destroy clones through the handle.** `tls.lzh.destroy_resource(name=...)` replaces the non-existent resource-level `destroy()`, matching how the destroy path already does it.
- **Catch both exception families.** `lzc.destroy_snapshots()` failures are now caught alongside `ZFSException` and converted, rather than escaping as a raw traceback.
- **Refuse before destroying anything.** A new pre-flight walks the whole dataset set — including the full `recursive_rollback` tree, before the fan-out loop rather than inside it — and collects every blocker it can see: dependent clones when `recursive_clones` is not set, holds in all cases, and clones that cannot be destroyed non-recursively because they have children or snapshots of their own. Previously a blocker on a child was discovered only after the parent had been irreversibly rolled back. This is fail-first, not atomic: a clone or hold created between the pre-flight and the destroy still fails mid-loop, and only a concurrently pruned snapshot (ENOENT) is tolerated.
- **Typed errors at both boundaries.** Blockers raise `ZFSRollbackBlockedException`, mapped to `EBUSY` with a message naming each blocking snapshot and what blocks it. `pool.snapshot.rollback` had no exception mapping at all and leaked every impl failure as an untyped traceback; it now mirrors `zfs.resource.snapshot.rollback`.
- **`force` now means how forcefully, not whether.** Clones are always unmounted before destroy, since `zfs_destroy()` does not unmount and a mounted clone could never be destroyed otherwise; `force` selects a forced unmount, matching the `zfs destroy` CLI. Unmount no longer requests a key unload, matching what the CLI's rollback path does.

Adds unit coverage for each defect and the pre-flight, plus integration coverage for clone-present, nested-clone, hold-present, and cross-dataset cases. `pool.snapshot.rollback` had no api2 coverage before this.

Newer bookmarks remain unhandled: pylibzfs exposes no bookmark primitives, so a newer bookmark still fails the rollback with an empty conflict list. That needs a pylibzfs change first and is tracked separately.
DeltaFile
+300-1tests/api2/test_zfs_resource_snapshot_rollback.py
+187-51src/middlewared/middlewared/plugins/zfs/snapshot_rollback_impl.py
+80-0tests/api2/test_pool_snapshot_rollback.py
+62-1src/middlewared/middlewared/plugins/zfs/exceptions.py
+24-9src/middlewared/middlewared/plugins/zfs/snapshot_crud.py
+21-6src/middlewared/middlewared/plugins/pool_/snapshot.py
+674-686 files

FreeBSD/ports fafe124Mk/Scripts qa.sh

Mk/Scripts/qa.sh: Filter baselibs() input to improve performance

After the baselibs() fix in f0f863b1a2d6, readelf is executed for each
result from find(1).  There are two concerns with this fix:

1. -exec readelf -d {} \; drops the filename from the error messages

readelf prints "File: <name>" headers only when it is supplied with two
or more files, and baselibs() uses ${file} from those headers.  So, the
two err() messages in baselibs() will break.

This is moot for now, though, because nothing in the ports tree can
trigger these errors.  Those base soname versions for libarchive and
libedit are long gone.

2. Performance hit with one readelf execution per staged file

The costs are high for ports that stage many files.  For
emulators/linux_base-rl9, the find returns over 30k hits that the while

    [12 lines not shown]
DeltaFile
+15-1Mk/Scripts/qa.sh
+15-11 files

FreeBSD/src b39457bsys/dev/virtio/p9fs virtio_p9fs.c

virtio_p9fs: Disallow detach if a session is in progress

PR:             295453
Reviewed by:    markj
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D57500
DeltaFile
+4-0sys/dev/virtio/p9fs/virtio_p9fs.c
+4-01 files

FreeBSD/src c08a97fsys/netpfil/ipfilter/netinet ip_nat.c

ipfilter: Fix checksum update for NAT_DIVERTOUT

When taking a snapshot of the before ip_len (s1) for comparison with the
after-translated ip_len (s2), we must convert it from network to host
byte order before we can use it. Add the missing ntohs() call.

PR:             296944
MFC after:      3 days
DeltaFile
+1-1sys/netpfil/ipfilter/netinet/ip_nat.c
+1-11 files

LLVM/project 04c879allvm/include/llvm/Analysis ScalarEvolution.h, llvm/lib/Analysis ScalarEvolution.cpp

[SCEV] Make operand use flags part of expression's identity. (#216604)

Update hashing for SCEVNodes to include the use-specific operand flags.
This makes sure expression with different operand flags distinct. Going
forward, this ensures that various maps that cache SCEV expressions
handle use-specific operands correctly.

PR: https://github.com/llvm/llvm-project/pull/216604
DeltaFile
+57-0llvm/unittests/Analysis/ScalarEvolutionTest.cpp
+15-25llvm/lib/Analysis/ScalarEvolution.cpp
+3-1llvm/include/llvm/Analysis/ScalarEvolution.h
+75-263 files

LLVM/project efd053fllvm/lib/Transforms/Utils Local.cpp PromoteMemoryToRegister.cpp, llvm/test/Transforms/PhaseOrdering always-inline-alloca-promotion.ll

[PromoteMemToReg] Insert store undef when removing lifetime markers (#191909)

The `lifetime.start` and `lifetime.end` can help avoid the creation of
spurious phi-node.

For example, when a local struct/array is declared in a loop, Clang
will generate a `alloca` outside the loop (required) and annotate
the loop body with `lifetime.start` and `lifetime.end` to remember
that there are no loop-carried live values. It is currently mostly
used by stack coloring, but we can use it to improve SSA too.

In particular, `sroa` and `mem2reg` did not leverage those lifetime
informations and will sometimes create spurious phi-nodes that
are not always cleaned-up later on (see unit test).

As `mem2reg` simply deletes the lifetime intrinsic before promoting
to SSA, it forgets the lifetime information completely. We improve this
by inserting a `store undef` in place of each
`lifetime.start`/`lifetime.end`

    [5 lines not shown]
DeltaFile
+190-0llvm/test/Transforms/SROA/lifetime-aware-phi.ll
+32-3llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
+7-7llvm/test/Transforms/PhaseOrdering/ARM/arm_var_q31.ll
+2-4llvm/test/Transforms/PhaseOrdering/always-inline-alloca-promotion.ll
+3-0llvm/lib/Transforms/Utils/Local.cpp
+1-1llvm/test/Transforms/PhaseOrdering/ARM/arm_mean_q7.ll
+235-156 files

FreeBSD/ports cc12e00databases Makefile

databases/postgresql19-*: Connect to the tree

PR:             297634
Approved by:    Palle Girgensohn <girgen at FreeBSD.org> (pgsql, maintainer, blanket - fix tree)
Fixes:          60c44ec8a907 (Update to latest versions)
Sponsored by:   UNIS Labs
DeltaFile
+8-0databases/Makefile
+8-01 files

FreeBSD/ports 627ec0esecurity/wpa_supplicant Makefile, security/wpa_supplicant-devel Makefile

security/wpa_supplicant*: Fix EAPOL_TEST build for non-standard SSL_DEFAULT

The post-build target does not have the same environment variables setup
as the do-build target. This results in the eapol_test binary getting
compiled against the headers of the TLS library specified in
SSL_DEFAULT, but getting linked against the TLS library from the base
system regardless of SSL_DEFAULT, causing build failures when
SSL_DEFAULT is set to a different TLS library/version than the on from
the base system.

Fix this by not using the post-build target to build the eapol_test
binary, but instead conditionally add the eapol_test target to
TARGET_ALL if the EAPOL_TEST option is enabled for the port.

Signed-off-by: Pascal Ernster <git at hardfalcon.net>
DeltaFile
+5-3security/wpa_supplicant29/Makefile
+5-3security/wpa_supplicant210/Makefile
+5-3security/wpa_supplicant/Makefile
+5-3security/wpa_supplicant-devel/Makefile
+20-124 files

LLVM/project 6473ad5llvm/lib/Target/AMDGPU AMDGPULibCalls.cpp, llvm/test/CodeGen/AMDGPU amdgpu-simplify-libcall-constant-fold.ll

[AMDGPU] Fix miscompile folding math calls with poison/undef vector lanes (#216971)

A poison or undef lane made evaluateCall ConstantDataVector cast fail,
and evaluateScalarMathFunc silently treated the missing operand as 0.0,
producing wrong results instead of bailing out
DeltaFile
+88-0llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-constant-fold.ll
+23-20llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp
+111-202 files

LLVM/project 8c1cd84llvm/lib/Target/AMDGPU AMDGPULowerBufferFatPointers.cpp, llvm/test/CodeGen/AMDGPU lower-buffer-fat-pointers-p7-in-memory.ll

[AMDGPU] Fix miscompile from stale value cache in LowerBufferFatPointers (#216962)

ConvertedForStore cached a p7->int conversion per Value across the whole
function, so a second store of the same fat pointer in a non-dominating
block reused an instruction from the first block, breaking dominance
DeltaFile
+38-0llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-p7-in-memory.ll
+2-12llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
+40-122 files

LLVM/project c8c439allvm/lib/Transforms/Vectorize LoopVectorizationLegality.cpp

Fixups
DeltaFile
+4-6llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp
+4-61 files

OPNSense/core 8430c7asrc/opnsense/mvc/app/views/layout_partials base_form.volt

mvc: fix typo in advanced/help toggle ids
DeltaFile
+2-2src/opnsense/mvc/app/views/layout_partials/base_form.volt
+2-21 files

LLVM/project aeca99cmlir/include/mlir/Interfaces CallInterfaces.td, mlir/test/Interfaces/CallInterfaces call-op-interface-roundtrip.mlir call-op-interface-invalid.mlir

drop areTypesEqual
DeltaFile
+0-199mlir/test/Interfaces/CallInterfaces/verify-call-op-interface.mlir
+111-0mlir/test/Interfaces/CallInterfaces/call-op-interface-invalid.mlir
+63-0mlir/test/Interfaces/CallInterfaces/call-op-interface-roundtrip.mlir
+0-33mlir/test/lib/Dialect/Test/TestOpDefs.cpp
+7-21mlir/include/mlir/Interfaces/CallInterfaces.td
+0-19mlir/test/lib/Dialect/Test/TestOps.td
+181-2725 files not shown
+187-28911 files

LLVM/project eb57234llvm/lib/Target/AMDGPU AMDGPULibCalls.cpp, llvm/test/CodeGen/AMDGPU amdgpu-simplify-libcall-tdo-cos.ll

[AMDGPU] Fix crash folding cos/sin table lookups on poison/undef vector lanes (#216972)

TDOFold cast the lane directly to ConstantFP, which aborts under
assertions when a lane is poison or undef instead of a table lookup
failure
DeltaFile
+13-0llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-tdo-cos.ll
+6-2llvm/lib/Target/AMDGPU/AMDGPULibCalls.cpp
+19-22 files

LLVM/project 21b3511llvm/include/llvm/Analysis LoopAccessAnalysis.h, llvm/include/llvm/Transforms/Vectorize LoopVectorizationLegality.h

Rework
DeltaFile
+11-8llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp
+2-16llvm/lib/Analysis/LoopAccessAnalysis.cpp
+8-9llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+1-3llvm/include/llvm/Analysis/LoopAccessAnalysis.h
+3-1llvm/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h
+25-375 files

LLVM/project 5f4af9bllvm/lib/Analysis LoopAccessAnalysis.cpp, llvm/lib/Transforms/Vectorize LoopVectorizationLegality.cpp VPlanTransforms.h

Rework
DeltaFile
+117-0llvm/lib/Transforms/Vectorize/VPlanConstruction.cpp
+0-53llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+6-35llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+16-2llvm/lib/Analysis/LoopAccessAnalysis.cpp
+9-7llvm/lib/Transforms/Vectorize/VPlanTransforms.h
+11-4llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp
+159-1014 files not shown
+167-11610 files

LLVM/project 74562e4llvm/lib/Transforms/Vectorize VPlanHelpers.h LoopVectorize.cpp

Remove helper
DeltaFile
+0-5llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+0-4llvm/lib/Transforms/Vectorize/VPlanHelpers.h
+0-92 files

LLVM/project b77e40allvm/test/Transforms/LoopVectorize compress-idioms.ll

Add test
DeltaFile
+112-2llvm/test/Transforms/LoopVectorize/compress-idioms.ll
+112-21 files

LLVM/project b2f2929llvm/lib/Transforms/Vectorize VPlan.h VPlanRecipes.cpp, llvm/test/Transforms/LoopVectorize compress-idioms-negative-tests.ll compress-idioms.ll

Fixups
DeltaFile
+106-2llvm/test/Transforms/LoopVectorize/compress-idioms.ll
+3-32llvm/lib/Transforms/Vectorize/LoopVectorizationLegality.cpp
+0-32llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+0-9llvm/lib/Transforms/Vectorize/VPlanRecipes.cpp
+2-2llvm/test/Transforms/LoopVectorize/compress-idioms-negative-tests.ll
+0-3llvm/lib/Transforms/Vectorize/VPlan.h
+111-806 files