[LV] Add test for branch costs in replicate regions. (NFC) (#234333)
Add a test for the costs of replicate regions without a target, where
branches have a non-zero cost.
Also force VF 4 for tests with replicated stores that are only
predicated by the header mask with tail-folding, so they remain
vectorized once the costs of extracting the mask for the replicated
stores are accounted for.
[libc++] Extract the A/B benchmark comparison into a reusable workflow (#234317)
Like we did for the historical benchmarking workflows, extract the
actual build + benchmarking logic into its own workflow. This is more
modular and it should fix issues with K8s workers not being able to
update PR comments.
This also prevents running workflows that contain the user's PR code in
a context where API keys (for posting comments) are available.
Assisted by Claude
[Clang] [CUDA] Clean up exception handling diagnostics in device code (#230658)
Currently, the way in which we diagnose exception handling as
unsupported in device code (e.g. CUDA, OpenMP) is a bit of a mess:
Generally, to implement `-fno-exceptions` in Sema, we have
`Sema::DiagnoseExceptionUse()`, which is called by both
`ActOnCXXTryStmt()` and `BuildCXXThrow()` (there is no `Build*()`
function for `try` statements), as well as when we rebuild them in
`TreeTransform` because we don't diagnose exceptions as unsupported in
dependent contexts to avoid diagnosing discarded code (see #139859).
That part is fine; however, for some reason, we also have _additional_
checks that are duplicated in `ActOnCXXTryStmt()` and `BuildCXXThrow()`.
This patch moves those checks into `DiagnoseExceptionUse()`.
Additionally, there's another change I made: `DiagnoseExceptionUse()`
used to return w/o emitting any diagnostics in CUDA mode. Presumably,
this was to avoid issuing duplicate diagnostics since
[6 lines not shown]
Zero the last page past EOF when extending a file
POSIX requires that "the system shall never write out any modified
portions of the last page of an object which are beyond its end". On
ZFS, data stored through a shared mapping past the end of a file is
kept in the cached last page, and becomes part of the file as soon as
the file is extended over it, by ftruncate(), fallocate(), a write past
the end of the file, or cloning a block past the end of the file:
fd = open("f", O_RDWR | O_CREAT, 0644); write(fd, "0123456789", 10);
p = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
memcpy(p + 10, "STALE-DATA", 10); munmap(p, 4096);
ftruncate(fd, 64);
pread(fd, buf, 10, 10); /* "STALE-DATA", expected zeros */
zfs_putpage() and zfs_putpages() never write out the part of a page
past the end of the file, but nothing clears it either, so after the
file is extended, read() returns it from the cached page, and if the
page was still dirty (or is dirtied again) it is written to disk, where
[31 lines not shown]
ZTS: test mmap stores past EOF when extending a file
Add mmap_eof_extend and its helper of the same name. For each way of
extending a file (ftruncate(), a write past the end of the file,
fallocate() on Linux and cloning a block past the end of the file), the
helper stores data past the end of a file through a shared mapping of
its last page, extends the file, and checks that the bytes past the old
end of file read back as zeros, both with the page still dirty when
the file is extended and after it was written back. The test then
remounts the file system and checks the bytes on disk as well.
The test runs on Linux and FreeBSD. On FreeBSD the helper clones with
copy_file_range() instead of FICLONERANGE, and the test skips the
fallocate mode, as ZFS on FreeBSD does not support posix_fallocate().
POSIX requires that modifications of the partial page beyond the end
of an object are never written out, and ext4, xfs and btrfs return
zeros here. This currently fails on both platforms: every way of
extending the file exposes the stored data through read(), and if the
[9 lines not shown]
[NFC][clang][test] Regenerate memcpy-inline-builtin-no-extern.c (#234083)
Regenerate checks with `update_cc_test_checks.py` and add a
`preserve_most` calling convention test case for #234081 and #234089.
Assisted-by: Gemini
powerdns: Update to 5.1.5
Released: 21st of October 2026
This is release 5.1.5 of the Authoritative Server. It contains bug fixes, as well as a minor feature and a security fix.
Please review the Upgrade Notes before upgrading from versions < 5.1.x.
Improvements
api: allow forced update for EXTEND and DELETE zone patch operations
References: pull request 18104
report remote in “unable to get SOA” messages
References: pull request 18131
correctly stop the Lua checker thread when exiting
References: pull request 18134
Bug Fixes
SQL: stricter listSubZones operation
References: pull request 18105
rest-api: fix signedness bug in json data normalization
References: pull request 18106
[14 lines not shown]
[CycleInfo] Invalidate all exit block caches when adding a block (#233378)
addBlockToCycle only cleared the getExitBlocks cache of the target cycle
and its ancestors, and splitCriticalEdge cleared nothing when the new
block lies outside every cycle. But splitting an edge that leaves a
cycle changes that cycle's exit blocks even when the new block is not
added to it: if the edge goes to the parent cycle the new block joins
the parent, and if it goes outside all cycles the new block joins no
cycle. In both cases a subsequent getExitBlocks on the inner cycle
returned the old successor instead of the new block.
Clear all exit block caches in addBlockToCycle and splitCriticalEdge.
They are recomputed lazily, and updates are rare.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
zdb: derive passphrase keys from the salt in little-endian
zdb -K derived the wrapping key from the PBKDF2 salt in host byte
order, while libzfs converts it to little-endian first. On big-endian
hosts zdb therefore derived the wrong key and couldn't load any
passphrase-wrapped key ("Permission denied"). Convert the salt the
same way libzfs does.
Found by running zdb -K in an s390x guest.
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Rob Norris <rob.norris at truenas.com>
Signed-off-by: Matthew Ahrens <matt at mahrens.org>
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
Closes #19510
[CycleInfo] Avoid quadratic cost in verifyCycle (#233385)
On CFGs with unreachable blocks, verifyCycle can potentially walk all
reachable blocks once for almost every block, in order to check that a
non-entry block has no reachable predecessors ouside the cycle. Fix this
by computing the set of reachable blocks lazily on first use and caching
it.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
libzfs: don't abort when a recv target's origin is outside the tree
recv_incremental_replication() compares the stream's origin of a file
system with the local one, and created_before() looks both up in the
local tree with fsavl_find(), passing the result straight to
fnvlist_lookup_string(). If the local origin was moved out of the
received tree, for example by promoting the original file system back
after the target had been cloned and promoted, the lookup returns NULL
and zfs receive aborts.
An origin outside the received tree can't have been promoted inside
it, so only check for a promote when both origins are in the tree, and
make created_before() report "same" for snapshots it can't find.
This makes cli_root/zfs_receive/zfs_receive_promote_outside pass.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Will Rouesnel <wrouesnel at wrouesnel.com>
Closes #17087
Closes #19308
ZTS: test zfs recv after the origin was promoted away
Add the sequence from #17087: replicate a file system, clone and
promote one of its snapshots on the receiving side, promote the
original back so the clone's origin lies outside the received tree,
then receive a new incremental replication stream into the clone.
The receive must succeed and create the new snapshot.
This fails now: zfs receive aborts in fnvlist_lookup_string() because
created_before() looks up the clone's origin in the received tree and
gets NULL.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Signed-off-by: Will Rouesnel <wrouesnel at wrouesnel.com>
Issue #17087
Closes #19308
Merge tag 'bitmap-for-v7.4-rc1' of https://github.com/norov/linux
Pull bitmap updates from Yury Norov:
"This includes __MAKE_OP() macro removal from me with the follow-up
from Mark, cleanups for bitmaps parser from Shashank and a couple Rust
docs fixes from Georgios"
* tag 'bitmap-for-v7.4-rc1' of https://github.com/norov/linux:
rust: bitmap: document panics in `next_bit` and `next_zero_bit`
rust: id_pool: document panics in `find_unused_id` and `release_id`
bitmap: test bitmap_parselist() with a group size close to UINT_MAX
bitmap: bitmap_parselist(): don't wrap around on a huge group size
bitmap: test bitmap_parselist() with text after the group size
bitmap: bitmap_parselist(): reject trailing characters after group size
bitmap: test bitmap_parse() with an illegal character before 8 hex digits
bitmap: bitmap_parse(): reject non-hex character before 8 digits
bitfield: Restore be16_replace_bits()
bitfield: get rid of __MAKE_OP machinery
[AMDGPU] Don't emit .amdgcn_target for each inline asm blob (#234195)
When the integrated assembler is used for textual output, AsmPrinter
parses every inline asm blob with a new AMDGPUAsmParser and calls
Run() on it. Run() invokes onEndOfFile() as if the blob were a complete
file, and that emits the deferred .amdgcn_target directive. Since each
parser tracked on its own whether the directive had been emitted, a
copy was printed after every inline asm statement, in addition to the
one AsmPrinter emits for the module.
Track this on AMDGPUTargetStreamer instead, which AsmPrinter and the
inline asm parsers share, so the directive is emitted at most once per
output file regardless of who gets there first. Assembling with
llvm-mc behaves as before.
This only shows up in textual output with the integrated assembler
enabled, which AMDGPU does not do yet, so there is no test here. Once
it is enabled the existing CodeGen/AMDGPU inline asm tests cover it.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
Fix infinite recursion from DFSan reaches function argument callbacks. (#233982)
With `-dfsan-reaches-function-callbacks`, a reaches function callback
that is marked uninstrumented in the ABI list and registered with the
runtime overflows the stack whenever a stale non-zero label sits in
`__dfsan_arg_tls`. The runtime calls the `dfsw$` wrapper, which reads
argument shadows from `__dfsan_arg_tls` and reports them, re-entering
the callback through the runtime before the callback's own reentrancy
guard runs. Nothing clears the stale label, so this repeats until the
stack overflows.
Two defects contribute. Wrappers get argument callbacks even though they
may be called from uninstrumented code, where their argument shadows are
stale. Also, the argument callback instrumentation is inserted before
the visitor runs, so the visitor instruments it again: argument shadow
loads are treated as application loads, and the callback calls as
instrumented calls whose argument shadow stores clobber
`__dfsan_arg_tls`.
Skip argument callbacks in wrappers, and add the inserted instructions
to `SkipInsts`.
NAS-144346 / 28.0.0-BETA.1 / Stop share deletes and dataset attachment lookups from processing every share (#20030)
Deleting a share, and deleting or locking a dataset that has shares on
it, got slower with every share on the system. Each operation looked up
the lock state of every share and rebuilt the SMB configuration more
than once. This makes the cost of those operations follow the shares
actually involved.
- Fetching a single entry by id from an older-style service now
processes only that entry. Before, it processed every row first and then
picked out the one asked for. This covers SMB shares, iSCSI extents,
NVMe-oF namespaces, S3 and WebShare, and every other service still on
the older framework.
- A query that selects specific fields no longer looks up lock state
unless it selects the locked field or filters on it. This applies to
services on both the older and newer frameworks.
- Finding a dataset's shares and tasks (dataset delete, lock and export,
and `pool.dataset.attachments`) now filters them in the database. Lock
state is looked up only when the caller filters on it.
[19 lines not shown]
[SLP]Keep scalar GEP index for external uses
The power-of-2 external-use heuristic swapped a cheap scalar GEP
index for an extractelement. The extracted index hid the consecutive
accesses from later trees, so they were gathered instead of
vectorized as wide loads.
Assisted-by: Cursor
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/234338
databases/cego: 2.54.43 -> 2.54.44, databases/p5-DBD-cego: 1.5.9 -> 1.5.10
cego:
- Improved error handling made for invalid procedure out parameter
calls, e.g. call myProc(null, null), where myProc has been defined
with out parameters. Instead of confusing error message "Unknown
variable null", the corresponding out parameter is mentioned in the
error messsage. e.g. "No out variable given for parameter <outval>"
p5-DBD-cego:
- Patch added to treat invalid procedure out parameter arguments.
If a scalar is given as an out parameter, an error is returned (
e.g. ? = myProc(?,?) with no binding on parameter 1 )