HardenedBSD/ports 397e526 — audio/deadbeef Makefile, audio/deadbeef-gui-plugins Makefile

Merge branch 'freebsd/main' into hardenedbsd/main
DeltaFile
+52-0chinese/fcitx5-keykey/pkg-plist
+10-40audio/deadbeef/Makefile
+48-0audio/deadbeef-gui-plugins/Makefile
+0-34audio/deadbeef/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+32-0audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+28-0chinese/fcitx5-keykey/Makefile
+170-7424 files not shown
+308-12530 files

LLVM/project a7bae76 — clang/lib/CIR/Lowering/DirectToLLVM LowerToLLVM.cpp, clang/test/CIR/Lowering unlowered-address-spaces.cir

[CIR] Reject language address spaces in DirectToLLVM pointer conversion

Reject unlowered language address spaces in pointer types when bypassing TargetLowering. Guard pointer-producing lowerings, including generated patterns, so failed conversions report legalization failures instead of silently selecting address space zero or constructing invalid LLVM operations.

Assisted-by: Codex / GPT-6
DeltaFile
+545-0clang/test/CIR/Lowering/unlowered-address-spaces.cir
+64-0clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+2-0clang/utils/TableGen/CIRLoweringEmitter.cpp
+611-03 files

LLVM/project ff0e4e8 — clang/include/clang/CIR LoweringHelpers.h, clang/include/clang/CIR/Dialect/IR CIROps.td

[CIR] Propagate initializer type adjustment failures

Reject initializers whose active members have no LLVM representation, including when an enclosing union's storage type is convertible. Propagate recursive adjustment failures before querying data layout or constructing LLVM operations.

Assisted-by: Codex / GPT-6
DeltaFile
+66-0clang/test/CIR/Lowering/unsupported-initializer-types.cir
+13-2clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+12-0clang/lib/CIR/Lowering/LoweringHelpers.cpp
+2-1clang/include/clang/CIR/LoweringHelpers.h
+1-1clang/include/clang/CIR/Dialect/IR/CIROps.td
+94-45 files

LLVM/project 9a0bb94 — clang/lib/CIR/Lowering/DirectToLLVM LowerToLLVM.h LowerToLLVM.cpp, clang/test/CIR/Lowering unsupported-type-conversions.cir

[CIR] Propagate type conversion failures in DirectToLLVM

Propagate failed type and constant conversions through DirectToLLVM so unsupported types produce legalization failures instead of invalid LLVM operations or a void function result.

Assisted-by: Codex / GPT-6
DeltaFile
+178-0clang/test/CIR/Lowering/unsupported-type-conversions.cir
+49-13clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+4-3clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h
+231-163 files

LLVM/project 126dbd9 — clang/test/CodeGen/RISCV lto-module-asm-abi.c

[Clang][RISC-V] Fix lto-module-asm-abi.c on non-asserts/no-lld builds (#226752)

Pass `-fno-discard-value-names` so the `entry:` label is preserved in
non-asserts builds, and drop `-fuse-ld=lld` so the driver check succeeds
on bots that do not have `ld.lld` installed.

Fixes: bf529329b5ce ("[RISC-V][LTO] Add baseline tests for LTO inline assembly and mapping symbols (#225129)")
Pull-Request: https://github.com/llvm/llvm-project/pull/226752
DeltaFile
+3-3clang/test/CodeGen/RISCV/lto-module-asm-abi.c
+3-31 files

HardenedBSD/ports 0ef520f — audio/deadbeef pkg-plist Makefile, audio/deadbeef-gui-plugins Makefile

audio/deadbeef: split GTK-based GUI plugins into separate port

- This allows to 1) simplify the main Makefile by removing
  fragile and incoherent logic to handle the codependencies
  between four GUI plugins; 2) consistently flavorize them
  against supported GTK versions.  Users can now switch GUI
  without having to reconfigure and rebuild the main port
- Drop custom NOTIFY_DESC in favor of standard description
  which is shorter and less cryptic (more user-oriented)
DeltaFile
+10-40audio/deadbeef/Makefile
+48-0audio/deadbeef-gui-plugins/Makefile
+0-34audio/deadbeef/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+32-0audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+24-0audio/deadbeef-gui-plugins/files/patch-Makefile.in
+1-18audio/deadbeef/pkg-plist
+115-928 files not shown
+167-10314 files

FreeBSD/ports 0ef520f — audio/deadbeef pkg-plist Makefile, audio/deadbeef-gui-plugins Makefile

audio/deadbeef: split GTK-based GUI plugins into separate port

- This allows to 1) simplify the main Makefile by removing
  fragile and incoherent logic to handle the codependencies
  between four GUI plugins; 2) consistently flavorize them
  against supported GTK versions.  Users can now switch GUI
  without having to reconfigure and rebuild the main port
- Drop custom NOTIFY_DESC in favor of standard description
  which is shorter and less cryptic (more user-oriented)
DeltaFile
+10-40audio/deadbeef/Makefile
+48-0audio/deadbeef-gui-plugins/Makefile
+0-34audio/deadbeef/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+32-0audio/deadbeef-gui-plugins/files/patch-plugins_gtkui_ddbcellrenderertextmultiline.c
+24-0audio/deadbeef-gui-plugins/files/patch-Makefile.in
+1-18audio/deadbeef/pkg-plist
+115-928 files not shown
+167-10314 files

LLVM/project dbea9bd — bolt/docs conf.py

[docs][bolt] Remove Markdown enum (#226411)

Remove use of Markdown enum from the bolt docs. Related to #223829.

This should fix our ATfL build
[failure](https://github.com/arm/arm-toolchain/actions/runs/36103090912/job/107969633028#step:7:22533)
```
Traceback (most recent call last):
  File "/workspace/python/.venv/lib/python3.12/site-packages/sphinx/config.py", line 529, in eval_config_file
    exec(code, namespace)  # NoQA: S102
    ^^^^^^^^^^^^^^^^^^^^^
  File "/workspace/src/bolt/docs/conf.py", line 18, in <module>
    globals().update(common_conf(tags, markdown=Markdown.NEVER))
                                                ^^^^^^^^
NameError: name 'Markdown' is not defined
```
DeltaFile
+1-1bolt/docs/conf.py
+1-11 files

LLVM/project 4c85cbe — clang/docs SafeBuffers.md LanguageExtensions.md, clang/docs/analyzer checkers.md

[docs] Replace clang.llvm.org/docs links with Sphinx links (#222507)

Use Sphinx document and option roles or project-relative links for links
within the Clang documentation. Repair stale generated-document
fragments found while validating the replacements. This ensures that
standalone documentation builds are self-contained, although
cross-project links (Clang->LLVM) typically go via absolute llvm.org
hrefs.

Part of #214861

Assisted-by: Codex
DeltaFile
+6-6clang/docs/LifetimeSafety.md
+5-5clang/docs/LanguageExtensions.md
+4-4clang/docs/analyzer/checkers.md
+3-4clang/docs/SafeBuffers.md
+3-3clang/docs/analyzer/user-docs/Annotations.md
+5-0utils/docs/llvm_sphinx/ext/absolute_links_test/markdown.md
+26-2215 files not shown
+46-4121 files

FreeBSD/ports 35e6a09 — chinese/fcitx5-keykey pkg-descr distinfo, chinese/fcitx5-keykey/files patch-adapters_fcitx5_CMakeLists.txt patch-CMakeLists.txt

chinese/fcitx5-keykey: add new ports.
DeltaFile
+52-0chinese/fcitx5-keykey/pkg-plist
+28-0chinese/fcitx5-keykey/Makefile
+20-0chinese/fcitx5-keykey/files/patch-CMakeLists.txt
+10-0chinese/fcitx5-keykey/files/patch-adapters_fcitx5_CMakeLists.txt
+3-0chinese/fcitx5-keykey/distinfo
+2-0chinese/fcitx5-keykey/pkg-descr
+115-01 files not shown
+116-07 files

HardenedBSD/ports 35e6a09 — chinese/fcitx5-keykey pkg-descr distinfo, chinese/fcitx5-keykey/files patch-adapters_fcitx5_CMakeLists.txt patch-CMakeLists.txt

chinese/fcitx5-keykey: add new ports.
DeltaFile
+52-0chinese/fcitx5-keykey/pkg-plist
+28-0chinese/fcitx5-keykey/Makefile
+20-0chinese/fcitx5-keykey/files/patch-CMakeLists.txt
+10-0chinese/fcitx5-keykey/files/patch-adapters_fcitx5_CMakeLists.txt
+3-0chinese/fcitx5-keykey/distinfo
+2-0chinese/fcitx5-keykey/pkg-descr
+115-01 files not shown
+116-07 files

LLVM/project ef60af8 — clang/test/SemaCXX new-nothrow-by-value.cpp

fixup! [Clang][ExprConst] Accept prvalue for nothrow new
DeltaFile
+1-0clang/test/SemaCXX/new-nothrow-by-value.cpp
+1-01 files

LLVM/project 991285a — llvm/test/CodeGen/AMDGPU bitinsert-bitextract.ll, llvm/test/CodeGen/ARM bitinsert-bitextract-fp.ll bitinsert-bitextract.ll

Merge branch 'main' into users/aokblast/clang/nothrow_new_prvalue
DeltaFile
+6,086-6,026llvm/test/CodeGen/RISCV/rvv/expandload.ll
+4,294-0llvm/test/CodeGen/RISCV/bitinsert-bitextract.ll
+3,321-0llvm/test/CodeGen/ARM/bitinsert-bitextract.ll
+1,989-0llvm/test/CodeGen/RISCV/bitinsert-bitextract-fp.ll
+1,976-0llvm/test/CodeGen/AMDGPU/bitinsert-bitextract.ll
+1,552-0llvm/test/CodeGen/ARM/bitinsert-bitextract-fp.ll
+19,218-6,0261,125 files not shown
+55,449-20,1781,131 files

LLVM/project 50f8025 — clang/include/clang/AST APValue.h, clang/lib/AST ExprConstant.cpp

[clang][AST] Mark APValue as LLVM_ATTRIBUTE_WARN_UNUSED (#226632)
DeltaFile
+1-2clang/lib/AST/ExprConstant.cpp
+2-1clang/include/clang/AST/APValue.h
+3-32 files

LLVM/project b3b1a5f — llvm/lib/Target/AMDGPU/AsmParser AMDGPUAsmParser.cpp, llvm/test/MC/AMDGPU reloc-operands-vopd.s

[AMDGPU][MC] Fixed an issue where VOPD instruction doesn't accept a relocatable symbol

Fixes LCOMPILER-2797.
DeltaFile
+21-0llvm/test/MC/AMDGPU/reloc-operands-vopd.s
+8-2llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+29-22 files

LLVM/project ff5453f — clang/lib/AST ExprConstant.cpp, clang/test/SemaCXX new-nothrow-by-value.cpp

[Clang][ExprConst] Accept prvalue for nothrow new

A user defined operator new can accept prvalue for nothrow. There is
no guarantee in spec that it should be lvalue. Relax the check with
side effect only.
DeltaFile
+18-0clang/test/SemaCXX/new-nothrow-by-value.cpp
+5-2clang/lib/AST/ExprConstant.cpp
+23-22 files

LLVM/project 0905c19 — clang/test/CodeGen/RISCV lto-module-asm-abi.c

[Clang][RISC-V] Fix lto-module-asm-abi.c on non-asserts/no-lld builds

Pass `-fno-discard-value-names` so the `entry:` label is preserved in
non-asserts builds, and drop `-fuse-ld=lld` so the driver check succeeds
on bots that do not have `ld.lld` installed.

Fixes: bf529329b5ce ("[RISC-V][LTO] Add baseline tests for LTO inline assembly and mapping symbols (#225129)")
DeltaFile
+3-3clang/test/CodeGen/RISCV/lto-module-asm-abi.c
+3-31 files

LLVM/project 32ee4f7 — llvm/include/llvm/CodeGen SDPatternMatch.h

[SDPatternMatch] Simplify EffectiveOperands and drop the template specialization. NFC (#226036)

The chain and glue operands are in fixed locations, we don't need a loop
to find them.

Use the template parameter to skip the constructor body instead of using
template specialization.
DeltaFile
+9-18llvm/include/llvm/CodeGen/SDPatternMatch.h
+9-181 files

OpenBSD/ports 3IJ87Nn — sysutils/fastfetch distinfo Makefile

   Update fastfetch to 2.69.0
VersionDeltaFile
1.19+2-2sysutils/fastfetch/distinfo
1.19+2-2sysutils/fastfetch/Makefile
+4-42 files

FreeNAS/freenas a911a44 — src/middlewared/middlewared/plugins/zfs set_rules.py, src/middlewared/middlewared/pytest/unit/plugins/zfs test_resource_set.py test_set_rules.py

Refuse volsize changes on read-only and locked volumes in zfs.resource.set

## Problem
ZFS applies each property in a request on its own, and it refuses a `volsize` change on a read-only or locked volume while still writing the rest of the request. When a thick volume was grown through `zfs.resource.set`, the `refreservation=auto` added to keep it thick was therefore written even though the resize failed, leaving a larger reservation on a volume that never grew. The same happened with a caller-supplied `refreservation`, and a `readonly: off` sent in the same request was applied even though ZFS still judged the resize against the stored read-only value. The resize tests brought in from master, and one S3 bucket test, also still called `zfs.resource.query`, and the resize tests expected the old `pool.dataset.update` error text.

## Solution
Added a set rule that rejects any `volsize` in the request while the volume is currently read-only or locked, so nothing is written and the caller is told to turn read-only off or unlock the volume first. `keystatus` is now read alongside the other properties so the rule can tell a locked volume apart. The resize and S3 bucket integration tests use `zfs.resource.list`, the resize tests expect the new messages, and there is a new case covering a grow that also turns `readonly` off.
DeltaFile
+62-1src/middlewared/middlewared/pytest/unit/plugins/zfs/test_set_rules.py
+22-1src/middlewared/middlewared/plugins/zfs/set_rules.py
+15-5tests/api2/test_zvol_resize.py
+1-1tests/api2/test_s3_bucket.py
+2-0src/middlewared/middlewared/pytest/unit/plugins/zfs/test_resource_set.py
+102-85 files

LLVM/project e54a8d1 — llvm/cmake/modules GetLibraryName.cmake

[cmake][Windows] Fix CMake variable (#226745)

As a follow-up fix to #226635, the variable is `WIN32` not `Win32`.
DeltaFile
+1-1llvm/cmake/modules/GetLibraryName.cmake
+1-11 files

HardenedBSD/ports 7efdef5 — www/hs-postgrest Makefile Makefile.cabal

www/hs-postgrest: Update 16.2 => 16.4
DeltaFile
+9-5www/hs-postgrest/distinfo
+3-3www/hs-postgrest/Makefile.cabal
+1-1www/hs-postgrest/Makefile
+13-93 files

FreeBSD/ports 7efdef5 — www/hs-postgrest Makefile Makefile.cabal

www/hs-postgrest: Update 16.2 => 16.4
DeltaFile
+9-5www/hs-postgrest/distinfo
+3-3www/hs-postgrest/Makefile.cabal
+1-1www/hs-postgrest/Makefile
+13-93 files

FreeNAS/freenas 7605918 — src/middlewared/middlewared/plugins/iscsi_ extents.py, src/middlewared/middlewared/plugins/nvmet namespace.py

Move locked-path check to zfs.resource and tell snapshots from directories

## Problem
Resolving any `@` in the locked-path check to its dataset stopped the snapshot crash, but it also made an ordinary directory like `/mnt/tank/data at old` report locked whenever a sibling dataset `tank/data` was locked. The `@` can't simply be stripped from authoritative forms only either, because iSCSI, NVMe-oF and VM hand snapshot-backed zvols over as `/mnt/<zvol>@<snap>`.

## Solution
The check now lives in the private `zfs.resource.path_is_locked` endpoint, and `pool.dataset.path_in_locked_datasets` is a thin shim to it. A snapshot is detected by the resource type libzfs returns and resolved to its dataset, which is also matched against the about-to-lock dataset. Under `/mnt` only a zvol snapshot counts, and parent components containing `@` are skipped during the walk, so directories resolve to the dataset they actually live in. Internal callers call the new endpoint directly.
DeltaFile
+2-75src/middlewared/middlewared/plugins/pool_/dataset_encryption_info.py
+73-0src/middlewared/middlewared/pytest/unit/plugins/zfs/test_path_is_locked.py
+68-0src/middlewared/middlewared/plugins/zfs/path_is_locked_impl.py
+0-60src/middlewared/middlewared/pytest/unit/plugins/pool/test_path_in_locked_datasets.py
+3-11src/middlewared/middlewared/plugins/nvmet/namespace.py
+3-11src/middlewared/middlewared/plugins/iscsi_/extents.py
+149-15712 files not shown
+176-17718 files

FreeNAS/freenas 6203968 — src/middlewared/middlewared/plugins/iscsi_ zfs_delegate.py, src/middlewared/middlewared/pytest/unit/plugins/iscsi test_zfs_delegate.py

Encode zvol names when matching snapshot devices to iSCSI extents

## Problem
The iSCSI extent delegate looked up extents on the snapshot devices about to be hidden by `zvol/<dataset>@<snap>` built from the raw dataset name, but an extent stores its path in the encoded form where a space becomes `+`. A zvol or snapshot with a space in its name therefore never matched, and `snapdev=hidden` removed the device node from under a live extent, which the attachment scan it replaced caught correctly.

## Solution
Build the lookup paths with `zvol_name_to_path`, the same encoder the extent disk choices come from, and pin it with unit tests over names containing spaces, including the exact path list passed to `iscsi.extent.query`.
DeltaFile
+42-4src/middlewared/middlewared/pytest/unit/plugins/iscsi/test_zfs_delegate.py
+2-1src/middlewared/middlewared/plugins/iscsi_/zfs_delegate.py
+44-52 files

FreeNAS/freenas 9ae822c — src/middlewared/middlewared/plugins/zfs set_rules.py, src/middlewared/middlewared/pytest/unit/plugins/zfs test_set_rules.py

Allow switching dedup between ON and VERIFY on tiered datasets

## Problem
The dedup tiering checks in `zfs.resource.set` fired whenever the dedup value changed, so `pool.dataset.update` rejected ON <-> VERIFY on a PERFORMANCE dataset or on a parent with PERFORMANCE descendants. The old pool.dataset validation deliberately skipped datasets that already had dedup in effect, since such a switch changes neither where data lives nor whether it is deduplicated.

## Solution
Both checks now only run when dedup goes from off to on (the `special_small_blocks` arm of the tiering check is unchanged). The rule matrix fixture was moved to an off -> on transition to match.
DeltaFile
+2-2src/middlewared/middlewared/plugins/zfs/set_rules.py
+3-1src/middlewared/middlewared/pytest/unit/plugins/zfs/test_set_rules.py
+5-32 files

FreeNAS/freenas 993bcc9 — tests/api2 test_pool_dataset_update_shim.py

Assert the raw copies value in the pool.dataset.update shim test

## Problem
The test compared `copies` from `zfs.resource.list` against the integer 2, but `copies` is an index property in ZFS, so its parsed value comes back as the string label "2" and the assertion failed on every run.

## Solution
Assert the raw value "2", matching how the neighbouring dedup and compression tests check what ZFS stored.
DeltaFile
+1-1tests/api2/test_pool_dataset_update_shim.py
+1-11 files

FreeNAS/freenas b558f0e — src/middlewared/middlewared/api/v27_0_0 pool_dataset.py, src/middlewared/middlewared/plugins/pool_ dataset.py

Point pool.dataset.update at zfs.resource.set

`pool.dataset.update` carried its own copy of every ZFS policy check (ACL coupling, headroom, blocksize alignment, recordsize choices, dedup licensing, SMB/snapdev guards, LUN resyncs) and wrote through the raw `update_impl`, so the two write paths could drift and the pool path skipped whatever `zfs.resource.set` and its delegates enforce.

Translate the pool payload into a `zfs.resource.set` request (lowercasing the index values the pool Literals uppercase, passing sizes and `copies` as ints, `quota: null` as 0, `INHERIT` and removed user properties as `inherit`) and let `zfs.resource.set` and its delegates validate and write. The update validation keeps only the field-shape rejections and the `user_properties_update` handling; everything else, the resyncs and the `ZFSException` mapping go.

When the shim itself already found errors, the request is run through `zfs.resource.set` as a `dry_run` so the caller still gets shim-side and zfs-side errors in one `ValidationErrors`. The request model is built inside the same `try`, so a value the zfs models reject comes back as a validation error rather than a raw pydantic one. Errors are re-keyed onto `pool_dataset_update.<field>`: the property's own field when the caller sent it, `acltype` for the derived `aclmode`/`aclinherit`, `volsize` for the re-reservation a volsize grow triggers, `user_properties_update`/`user_properties` for the caller's own user properties, and bare `pool_dataset_update` for anything structural.

Behaviour changes worth knowing: `copies` outside 1..3 and a negative `reservation` are now rejected; the recordsize and shrink messages come from the zfs rules; the ACL combination error lands on `acltype` rather than `aclmode`; a ZFS failure is keyed on `pool_dataset_update` instead of `pool.dataset.update`; the dRAID volblocksize check on update is gone, and `force_size` no longer bypasses the headroom check (its description says so). An empty payload still skips the write and emits CHANGED.
DeltaFile
+83-248src/middlewared/middlewared/plugins/pool_/dataset.py
+156-0tests/api2/test_pool_dataset_update_shim.py
+150-0src/middlewared/middlewared/pytest/unit/plugins/pool/test_dataset_update_shim.py
+8-0src/middlewared/middlewared/api/v27_0_0/pool_dataset.py
+1-1tests/sharing_protocols/nvmet/test_nvmet_tcp.py
+1-1tests/api2/test_draid_record_and_block_size.py
+399-2506 files

FreeNAS/freenas 2e7515f — src/middlewared/middlewared/plugins/pool_ dataset_encryption_info.py, src/middlewared/middlewared/pytest/unit/plugins/pool test_path_in_locked_datasets.py

Resolve snapshot names to their dataset in the locked-path check

## Problem
`pool.dataset.path_in_locked_datasets` opened the resource named by the path and read its `crypto()`; a snapshot-backed iSCSI extent, NVMe-oF namespace or VM disk (`zvol/<dataset>@<snap>`) therefore reached it with an `@` name, pylibzfs returned a snapshot object with no `crypto`, and the AttributeError escaped, so `iscsi.extent.create` on such an extent inserted its row and then crashed in `get_instance`, and every later extent query failed on the orphan.

## Solution
A snapshot holds no keys, so its lock state is its dataset's: strip the snapshot suffix before the parent walk, which also lets the ancestor-prefix check see the dataset. Pinned with a unit test over the three accepted path forms.
DeltaFile
+60-0src/middlewared/middlewared/pytest/unit/plugins/pool/test_path_in_locked_datasets.py
+3-0src/middlewared/middlewared/plugins/pool_/dataset_encryption_info.py
+63-02 files

FreeNAS/freenas a5d702a — src/middlewared/middlewared/plugins/zfs resource.py resource_set.py, src/middlewared/middlewared/pytest/unit/plugins/zfs test_delegates.py

Add a delegate registry to zfs.resource.set

## Problem
Other plugins' policy on a property change (share ACL constraints, LUN resyncs, snapshot-device visibility) lived inline in `pool.dataset.update`, so `zfs.resource.set` could not enforce it and every new consumer of the raw namespace would have had to re-implement it.

## Solution
Add a delegate registry to `zfs.resource`: a delegate declares the resource types and property names it cares about, validates into the same `ValidationErrors` as the intrinsic rules before anything is written, and runs its side effects after a successful write, where a failure is logged and never breaks the write's return. Both hooks are coroutines, bridged once per phase from the thread `set` runs on and skipped when no delegate participates. A volume's present snapshot devices are handed to delegates when the request touches `snapdev`. The mechanism is pinned with fake delegates; the real registrants follow separately.
DeltaFile
+335-0src/middlewared/middlewared/pytest/unit/plugins/zfs/test_delegates.py
+96-0src/middlewared/middlewared/plugins/zfs/delegates.py
+23-2src/middlewared/middlewared/plugins/zfs/resource_set.py
+14-1src/middlewared/middlewared/plugins/zfs/resource.py
+468-34 files