Log default route failures in route.sync instead of raising
Guard every add, change and delete of the IPv4 and IPv6 default
route so a single netlink failure is logged and the rest of the
sync continues. The IPv6 add and change paths also catch OSError
because the interface named in the gateway may no longer exist.
Model HA as a license feature instead of a license type
This commit adds changes to follow upstream collapsing enterprise_single and enterprise_ha into a single enterprise type, with HA moving into the features dict as its own key. The HA entitlement becomes an ordinary matrix vector keyed on that feature, so LicenseTypeRule has nothing left to decide and goes away with it.
Legacy blobs predate the feature vocabulary, so the shim injects the HA key when the blob names a second controller serial. That is the same condition which used to pick the enterprise_ha type, which is what keeps every fielded legacy pair licensed for failover.
[libc++abi][NFC] Format private_typeinfo.cpp (#223734)
I'm planning to work on `private_typeinfo.cpp` a bit, so this formats
the file to reduce the diff in later patches.
NAS-143717 / 26.0.0 / Convert the zfs.resource services to the typesafe pattern (by Qubad786) (#19714)
## Context
`zfs.resource`, `zfs.resource.snapshot` and `zfs.resource.pool` were
already half-converted: public methods carried
`@api_method(check_annotations=True)` against models in `api/v27_0_0/`,
and most in-process consumers already went through `call2`. What was
missing was the structural half - the service classes still held the
implementation. `resource_crud.py` and `snapshot_crud.py` were 800+
lines each, mixing a 117-line create pipeline, destroy validation, path
helpers and per-method exception translation in with the API surface.
## Solution
**Lean shims delegating to module functions.** The three services keep
only their `Config`, decorators and docstrings, and hand off to plain
functions taking a `ServiceContext` - the same shape `ports`, `hardware`
and `boot` already use. The logic lands in
`resource_{query,create,destroy,ops}.py`, `snapshot_ops.py` and
`prefetch_ops.py`. `create_rules.py`'s three pool-inspecting helpers now
[26 lines not shown]
[clang] Unique MultiKeywordSelector with a UniquingSet (NFC) (#223626)
This patch migrates MultiKeywordSelector in SelectorTable from
llvm::FoldingSet to llvm::UniquingSet.
MultiKeywordSelector keys on an ArrayRef<const IdentifierInfo *>.
Switching to UniquingSet allows us to look up multi-keyword selectors
with a typed key, eliminating FoldingSetNodeID serialization at lookup
sites and removing MultiKeywordSelector::Profile.
Assisted-by: Antigravity
[GlobalISel] Remove dead declarations and functions in CombinerHelper (NFC) (#223624)
CombinerHelper::getDataLayout: Added on July 25, 2024 in commit
db8c84fc7a75dd60bcfff7160b51e1a55e7e0f73 without any callers.
CombinerHelper::tryCombineCopy: The last caller was removed on
September 24, 2023 in commit bc6e7f057340ab0b995cc17a170e34545a295f03.
CombinerHelper::matchCombineMergeUnmerge: The last use was removed on
January 30, 2026 in commit 369e78774aef11f8e1215bb41fdf8db138ce315e.
CombinerHelper::matchCombineAddP2IToPtrAdd,
CombinerHelper::applyCombineAddP2IToPtrAdd: The last use was removed on
September 8, 2026 in commit 3741dacd195aa08b082570077ca89547cb062bc5.
CombinerHelper::matchCombineConstPtrAddToI2P,
CombinerHelper::applyCombineConstPtrAddToI2P: The last use was removed
on
September 8, 2026 in commit 3741dacd195aa08b082570077ca89547cb062bc5.
[15 lines not shown]
[AMDGPU] Prevent folding of FMAC into FMAAK with two literals (#217438)
Currently the `foldImmediate` function can fold FMAC into FMAAK with two
literals causing a verifier failure:
```
*** Bad machine code: VOP2/VOP3 instruction uses more than one literal ***
- function: fold_fmac_to_fmaak
- basic block: %bb.0 (0x627ad4dd40d0)
- instruction: %3:vgpr_16_lo128 = contract nofpexcept V_FMAAK_F16_t16 10526, killed %4:vgpr_16_lo128, 8478, implicit $mode, implicit $exec
```
This change checks if a newly formed FMAAK is valid, and in a case two
literals are used it introduces a MOV to legalize the instruction.
Fix zfs.resource.create not-found messages and tier test gating
## Problem
Two separate defects turned up running the `zfs.resource.create` integration tests. `ZFSPathNotFoundException` stores an already-formatted message in `args[0]`, and the create handler pulled that out and repr'd it a second time, so a missing pool surfaced as `Pool "'sometank' not found" does not exist.` rather than naming the pool cleanly; the parent-dataset variant read the same way. Separately, the `tier_pool` fixture gated on `system.is_enterprise`, which does not exist, so the three tiering tests errored with `Method does not exist` on every system instead of either running or skipping.
## Solution
- **Not-found messages**: the exception now keeps the raw path in `self.path`, mirroring what `ZFSPathHasClonesException` already does, and the create handler formats from that instead. Every raise site already passes a bare path, and this was the only place in the plugin treating `args[0]` as one.
- **Tier tests**: use the `entitled` integration-test asset to mock `truenas.entitlements.check` for ZFSTIER. Checking the live entitlement instead would just skip these tests everywhere that isn't licensed for tiering, which is most of our test fleet; mocking it means they actually build the tier pool and exercise the placement and dedup paths.
NAS-143785 / 26.0.0 / Add the S3_AUDIT and S3_VERSIONING license features (by yocalebo) (#19727)
S3 auditing and bucket versioning are now decided by the license rather
than by the hardware. Both features use a key only rule in the product
matrix, so a system is entitled when its license carries the key, on
appliance and community hardware alike. Legacy licenses do not receive
either key because the S3 service is new and nothing in the field has
it.
The S3 config service asks the entitlement engine instead of reading the
chassis, and bucket validation refuses versioning without the key. The
API descriptions and the integration tests follow, with the tests
toggling the entitlement mock rather than skipping off appliance
hardware.
Audit records still only reach the audit database on appliance hardware
until the audit handler daemon learns to forward S3 records on community
systems. That change lives in the audit_rules repo.
[2 lines not shown]
NAS-143785 / 26.0.0-RC.1 / Add the S3_AUDIT and S3_VERSIONING license features (by yocalebo) (#19728)
S3 auditing and bucket versioning are now decided by the license rather
than by the hardware. Both features use a key only rule in the product
matrix, so a system is entitled when its license carries the key, on
appliance and community hardware alike. Legacy licenses do not receive
either key because the S3 service is new and nothing in the field has
it.
The S3 config service asks the entitlement engine instead of reading the
chassis, and bucket validation refuses versioning without the key. The
API descriptions and the integration tests follow, with the tests
toggling the entitlement mock rather than skipping off appliance
hardware.
Audit records still only reach the audit database on appliance hardware
until the audit handler daemon learns to forward S3 records on community
systems. That change lives in the audit_rules repo.
[2 lines not shown]
Add sharing.s3.force_disable_versioning
Versioning cannot return to OFF through sharing.s3.update. The new
endpoint is the deliberate exception: it forces the row to OFF, clears
snapshot_versions, restarts the S3 service, and the daemon then slowly
removes the stored versions. Refused on object-lock buckets.
[mlir] Migrate AMDGPU/ROCDL to targets, not chipset versions
**migration tl;dr:** Replace usages of `amdgpu::Chipset` with `ROCDL::TargetInfo`, ideally move from `chipset=` to `arch=`. If you don't use upstream pipelines, call 'TargetInfo::migrateArchFeaturesToModuleFlags` at the appropriate location.
Further note: if you've got a build pipeline that's getting a `gfxXXX` name from something like `rocm_agent_enumerator`, using a full triple name like the ones you get from `rocminfo` is preferred.
`amdgpu::Chipset` was an awkward hack that was hard to keep up to date
with changes in the compiler/new architectures, and didn't properly
support generic targets (and has been strongly disfavored by the
compiler team).
This PR replaces `amdgpu::Chipset` with `ROCDL::TargetInfo`, a
structure that uses LLVM's TargetParser and the underlying LLVM
features tables to get the real nature of the target being compiled
for.
This also helps MLIR move to
new-style (`-mtriple=amdgpuX.YZ-amd-amdhsa`) over "old
style" (`-mtriple=amdgcn-amd-amdhsa -mcpu=gfxXYZ`) triples.
[36 lines not shown]
[mlir][ROCDL] Add TargetInfo to replace Chipset, allow features queries
Add a now ROCDL::TargetInfo struct that parses AMDGPU triples and
target names using the same logic that Clang and LLVM
use (TargetParser) and maintains the set of features available on a
given GPU.
This is an improvement over the old `amdgpu::Chipset` struct since
that was just a version number and often became stale compared to the
knowledge exposed by LLVM, such as gfx1170 having OCP FP8 support even
though other gfx11 chips don't have it.
This struct also allows for moving to new-style
triples (amdgpu9.42-amd-amdhsa vs amdgcn-amd-amdhsa--gfx942, for
example), which is an ongoing migration in other parts of the compiler
that this PR lets us follow.
It also enables compiling for generic targets, like `gfx11-generic`,
which can be run on all chips in a generation.
[15 lines not shown]
[AMDGPU] Expose more subtarget features for MLIR (#223561)
- `FeatureAtomitFaddNoRtnInsts` is needed to control when atomic
emulation
for buffer operations happens
- `FeatureBackOffBarrier` controls an inline-assembly workaround for
LDS-only barriers on old gfx9
- `FeatureLfsBarrierArriveAtomic` is a precise flag compared to arch
versions
- `FeatureORPFP8ConversionInsts` controls which MLIR FP8 types can be
lowered to LLVM
- `FeaturePermlane16Insts`is another feature check
Clang and flang tests are updated since they look at the feature set
AI disclosure: Claude made these changes, I wrote this message
mail/sympa: Update WWW
The website for the community of Sympa have moved to the
new domain "sympa.community".
PR: 297888
Approved by: Geoffroy Desvernay <dgeo at centrale-med.fr>
(maintainer timeout, 2+ weeks)
Approved by: osa, vvd (Mentors, implicit)
(cherry picked from commit b5beeff440fe0d7c0ec15d72e30bcefb6b30343f)
NAS-143785 / 27.0.0-BETA.1 / Add the S3_AUDIT and S3_VERSIONING license features (#19721)
S3 auditing and bucket versioning are now decided by the license rather
than by the hardware. Both features use a key only rule in the product
matrix, so a system is entitled when its license carries the key, on
appliance and community hardware alike. Legacy licenses do not receive
either key because the S3 service is new and nothing in the field has
it.
The S3 config service asks the entitlement engine instead of reading the
chassis, and bucket validation refuses versioning without the key. The
API descriptions and the integration tests follow, with the tests
toggling the entitlement mock rather than skipping off appliance
hardware.
Audit records still only reach the audit database on appliance hardware
until the audit handler daemon learns to forward S3 records on community
systems. That change lives in the audit_rules repo.
NAS-143611 / 26.0.0-RC.1 / Reject recursive permissions changes on S3 bucket mountpoints (by anodos325) (#19725)
filesystem.chown, filesystem.setperm and filesystem.setacl now refuse a
recursive change whose path is the mountpoint of a dataset consumed by
an S3 bucket, or that would traverse into one from above. The error
points the caller at the bucket's s3data directory instead, since a
recursive change over the whole bucket may have undefined behavior and
expose security risks.
Original PR: https://github.com/truenas/middleware/pull/19693
Co-authored-by: Andrew Walker <andrew.walker at truenas.com>