NAS-145046 / 28.0.0-BETA.1 / Make all string fields single-line by default (#20179)
`str` now accepts only single-line string by default.
If we need a multiline string, it must be `Multiline[str]` or
`Multiline[NonEmptyString]` or etc.
[AArch64][SLP] Precommit test of fusing extractelement with user (#241858)
Test for pr#241406 showing that we never consider extractelement to be
free due to being able to be fused with its user.
[LoongArch] Improve ANDN selection for masked bit tests (#236361)
Improve LoongArch ANDN instruction selection for masked bit operations:
·Recognize additional operand permutations of (X & M) ^ M.
·Optimize (X & M) == M and (X & M) != M into masked zero comparisons.
·Replace AND + XOR sequences with a single ANDN where applicable.
·Add CodeGen tests covering LA32/LA64, autogenerated LA32/LA64 checks,
and negative cases.
Assisted-by: codex/cloud
[OpenMP][ompd] Fix compare wraparound and improve test (#240353)
The test checks for an "incomplete" return value, which can only happen
for a thread list, not a single value. This used to work because of the
unsigned int wraparound in the corresponding code check, which
incorrectly yielded the "incomplete" return value.
NAS-145200 / 27.0.0 / Replace the TrueSearch program with truesearchd (by anodos325) (#20195)
- The `truesearch` service runs two units, `truesearchd` and
`truesearch-indexer`. Samba uses `spotlight backend = truesearch`.
truesearchd handles client requests. truesearch-indexer does the actual
file indexing and fs watching.
- Middleware writes `/etc/truesearchd/truesearch.conf` while the index
dataset is mounted. A dataset gets one `[target]` row if it holds an SMB
share with Spotlight search on or a WebShare share with search on, or if
it is mounted beneath such a share. Time Machine shares, home shares and
private datasets shares are not indexed.
- Encrypted datasets are now indexed due to changes in default index
dataset encryption posture.
- `.system/truesearchd` replaces `.system/truesearch`. On a data pool,
it is encrypted with the pwenc secret as a raw key. Middleware does not
mount a copy that is not encrypted or that the secret does not unlock,
and TrueSearch then reports that it is not mounted. A move of the system
dataset does not copy it, and the indexes are built again. It has the
properties of the tiering dataset.
[14 lines not shown]
[Offload] Report no pending work for host plugin queues (#240927)
The host plugin runs every operation synchronously, but
hasPendingWorkImpl returned true unconditionally. As a result
OL_QUEUE_INFO_EMPTY was always false on the host device, and
olDestroyQueue parked every host queue on the context's outstanding list
until the context was destroyed.
Return false instead, so a host queue reports as empty and is released
when it is destroyed. All backends now report the real queue status, so
drop the "may be unconditionally false" caveat from the
OL_QUEUE_INFO_EMPTY documentation.
Assisted-by: Claude
NAS-145200 / 27.1.0 / Replace the TrueSearch program with truesearchd (by anodos325) (#20196)
- The `truesearch` service runs two units, `truesearchd` and
`truesearch-indexer`. Samba uses `spotlight backend = truesearch`.
truesearchd handles client requests. truesearch-indexer does the actual
file indexing and fs watching.
- Middleware writes `/etc/truesearchd/truesearch.conf` while the index
dataset is mounted. A dataset gets one `[target]` row if it holds an SMB
share with Spotlight search on or a WebShare share with search on, or if
it is mounted beneath such a share. Time Machine shares, home shares and
private datasets shares are not indexed.
- Encrypted datasets are now indexed due to changes in default index
dataset encryption posture.
- `.system/truesearchd` replaces `.system/truesearch`. On a data pool,
it is encrypted with the pwenc secret as a raw key. Middleware does not
mount a copy that is not encrypted or that the secret does not unlock,
and TrueSearch then reports that it is not mounted. A move of the system
dataset does not copy it, and the indexes are built again. It has the
properties of the tiering dataset.
[14 lines not shown]
[lldb] Show synthetic children in the return value of the thread description (#241323)
ValueObject::Dump without options uses synthetic children only for
synthetic value objects.
assisted by claude
kern_undelete: remove unused pathseg argument
I'd failed to pass it down to NDINIT, but nothing calls kern_uninit
with a path argument in sys space here or in CheriBSD so just drop it.
Effort: CHERI upstreaming
Reported by: llm-postcr
Sponsored by: Innovate UK
Fixes: 7273d80ba18c ("vfs_syscalls.c: add kern_ and user_ implementations")
ipsec: Do not reference the default policy for packets without a PCB
When no security policy matches a packet, ipsec[46]_getpolicy() returns
the default policy with a new reference, and the caller drops it right
after looking at the policy type. Once any security policy is
configured, every forwarded packet goes through ip_forward() and
ipsec4_forward(), which checks the inbound and the outbound policy.
That is four atomic operations per packet on one reference count that
all CPUs write.
The default policy is allocated with its vnet and freed only when the
vnet goes away, and the sysctl limits it to NONE or DISCARD. A packet
without a PCB has no policy cache to keep it in. In that case, check
the policy type directly and take no reference, for NONE as well as for
DISCARD. Packets with a PCB still take the reference, because the PCB
caches the policy.
No functional change intended. DISCARD still drops the packet, and the
policy violation counters are incremented as before.
[5 lines not shown]
[CIR][NFC] Separate shared metadata lowering from OpenCL conversions (#240990)
Extract function metadata dispatch and aggregation into
`LowerToLLVMMetadata`, including the maximum work-group size conversion
introduced in #227715. Keep OpenCL-specific conversions in
`LowerToLLVMOpenCLMetadata`.
Assisted-by: Codex / GPT-6
Base the NTS migration on 6d08137a3def and drop default NTS servers
NAS-145217 (#20199) added migration 6d08137a3def after b4fac2fc788a in
the 27.0 directory, and merge migration 5dfc6658deaa in 28.0. So
04a6293d595a now follows 6d08137a3def instead of b4fac2fc788a, and
merge migration 4ba342aeda4a joins it with 5dfc6658deaa instead of
3c7d1e9a5b20. Without this alembic would find two heads. 04a6293d595a
and 4ba342aeda4a are now dated 2026-11-12, after their parents, so
their file names and create dates follow the revision order.
04a6293d595a no longer adds time.cloudflare.com and ntppool1.time.nl
to systems still on the stock NTP servers. While any NTS server is
configured chronyd ignores every server without NTS, and the web UI
cannot show or set NTS yet: it would list the two as ordinary servers
and give no reason why a server added there goes unused. The defaults
can come back with the UI support. The migration still adds the
ntp_nts and require_nts columns and removes servers whose address is
not a single word.
[3 lines not shown]
[libc][docs] Add remaining C23 and POSIX docgen header catalogues (#241564)
Twenty-four C23 and POSIX headers currently lack docgen status
catalogues, while float.h and other freestanding headers in
CLANG_FREESTANDING_HEADERS short-circuit to implemented instead of
checking LLVM-libc's own macro and type headers. Purely compiler-owned
freestanding headers (such as stdarg.h, stdatomic.h, stddef.h, and
tgmath.h) live in Clang or GCC rather than libc, so docgen cannot
truthfully report per-symbol coverage for them.
Remove CLANG_FREESTANDING_HEADERS and provider overrides so float.h,
limits.h, stdckdint.h, and stdint.h evaluate directly against
libc/include/ (including typedefs in macro headers), note the
compiler-provided headers on libc/docs/headers/index.md, and add docgen
YAML catalogues for limits.h, stdckdint.h, stdint.h, and the 21
remaining POSIX headers.
Assisted-by: Automated tooling, human reviewed.
[lldb] Give tail call frames distinct, ordered StackIDs (#240665)
Synthesized tail call frames all had an invalid CFA, so the tail call
frames of one function shared a `StackID` and broke the order that
`StackFrameList::GetFrameWithStackID` relies on. On a stack that repeats
a tail call, `SBFrame` calls could resolve to the wrong frame, and
lookups fell back to a linear scan, making a full stack walk quadratic.
Give each tail call frame the CFA of the younger frame that replaced it,
plus a depth that orders the frames sharing that CFA. The borrowed CFA
only identifies the frame: `SBFrame::GetCFA` and `DW_OP_call_frame_cfa`
still treat it as having none.
[LoongArch][NFC] Replace manual v2i128 check with MVT::v2i128 (#241726)
Now that v2i128 is a legal MVT, the manual v2i128 check and the
associated stale comment are no longer needed. Compare against
MVT::v2i128 directly instead.
NAS-145217 / 27.0.0 / Fix snapshot task queries failing on a zero lifetime (by themylogin) (#20198)
The API accepted a lifetime of 0 for periodic snapshot tasks until
NAS-142610 added a minimum of 1 to the entry model. Rows saved with 0
before that change now fail validation on every pool.snapshottask.query
call, which breaks pool export and zettarepl. This migration raises
those rows to 1, which only keeps their snapshots longer.
Original PR: https://github.com/truenas/middleware/pull/20197
Co-authored-by: themylogin <themylogin at gmail.com>