Attributor: Only reanalyze functions that may gain call graph references
Reanalyzing the function of every replaced use could remove a call graph
edge before another function added the same reference, failing the trivial
edge assertion with EXPENSIVE_CHECKS in cgscc-new-ref-edge.ll. Only
reanalyze the user's function if the new value may reference a function.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
[Flang][OpenMP][NFC] Remove some no longer used functions (#238036)
Forgot to remove these in prior pass that removed the user, now they
have no uses so no longer required.
[AMDGPU][NFC] Clean up pre-gfx125x test RUN lines (#238107)
Drop flags that match defaults: `-verify-machineinstrs` in `.ll` tests,
`-global-isel=0` in tests without a GlobalISel run, and redundant
`-global-isel-abort`.
Use subarch triples instead of amdgcn plus `-mcpu`.
Error-only MC runs use `-filetype=null`.
SystemZ: Lower sub-word atomicrmw during type legalization
Produce the ATOMIC_LOADW_* nodes when replacing the illegal i8/i16
results, instead of custom lowering the promoted node later. This
removes the no-op custom type legalization case.
Constants are now any-extended, so one test materializes an immediate
with llill instead of lhi.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
ZTS: enable the busy checkpoint discard test
Remove the skip and obsolete reporter allowances after the checkpoint
accounting fix. Track whether the saved discard limit still needs to be
restored, keeping one exit callback without relying on saved-file paths.
Preserve restoration failure checks.
Assisted-by: OpenAI Codex
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tony Hutter <hutter2 at llnl.gov>
Reviewed-by: Alexander Motin <alexander.motin at TrueNAS.com>
Signed-off-by: Giuseppe Piscitelli <ooonea at gmail.com>
Closes #19645
zpool: reject a dRAID children count of zero
Since dRAID failure domains were added, the children count given with
the "c" suffix of a dRAID type only has to divide the number of disks,
and draid_config_by_type() checks that by taking the number of disks
modulo the count. A count of zero, as in "zpool create tank draid2:0c
<disks>", divides by zero and zpool is killed by SIGFPE instead of
reporting an invalid vdev specification. Before that change the count
had to equal the number of disks, so zero was rejected.
zpool_create_draid_003_pos runs that command and passes anyway,
because log_mustnot takes a command killed by SIGFPE for one that
failed; the kernel log of those runs shows "trap divide error" in
zpool.
Reject a zero count with the message given for a count which does not
divide the number of disks.
Signed-off-by: Tigerblue77 <37409593+tigerblue77 at users.noreply.github.com>
[3 lines not shown]
ZTS: raidz_expand_001_pos: don't race the post-expansion scrub
The test pauses the reflow at a random number of bytes up to the
pool's allocated space, which can be more than the reflow ever copies.
The expansion then completes, possibly only after one of the test's
imports, and the scrub that zfs_scrub_after_expand starts races with
the test's own "zpool scrub -w", which fails with "currently
scrubbing" (seen in CI on debian13). The test does its own scrubs, so
disable the automatic one for its duration, as raidz_expand_004_pos
does.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tigerblue77 <37409593+tigerblue77 at users.noreply.github.com>
Signed-off-by: Will Rouesnel <wrouesnel at wrouesnel.com>
Closes #19433
raidz: reconstruct rows not yet reflowed with their own width
When a raidz read fails its checksum and the damaged columns are not
known, vdev_raidz_combrec() tries every combination of up to nparity
failed children. Besides the current children, it also simulates
children that failed before an expansion: the reflow copies their bad
sectors without checking them, spreading them diagonally over the new
layout, and raidz_simulate_failure() finds them by the sector's position
in the old width. It numbered every column's sector by the current
physical width, though. During an expansion, the rows the reflow has
not copied yet are still at their old location, one child narrower,
and for them that numbering is wrong: simulating a child that failed
before the expansion picked unrelated columns of those rows, and their
damage only matched the simulated failure of the current child.
A block that straddles the reflow offset then needed two simulated
failures for one bad disk, one for the damage the reflow had copied
into its new rows and one for its old rows. A scrub reported a
permanent error for such a block on raidz1 even though every row had a
[14 lines not shown]
ZTS: repair a block that straddles the raidz reflow offset
While a raidz expansion is in progress, a block that straddles the
reflow offset has some rows at their new location and the others still
at their old one. When a disk has silently lost data, the reflow copies
that damage along into the new rows, and the rows it has not reached
yet still have it on the failed disk. Each row has at most one bad
sector on raidz1, so a scrub must be able to repair the block, but it
reports a permanent data error for it instead. A scrub of a damaged
pool while the reflow runs meets such blocks at every txg, which is one
way raidz_expand_001_pos fails now and then in CI.
Add raidz_expand_boundary_repair: write a file to a raidz1 pool, attach
a disk with the reflow paused, zero the not yet reflowed part of one
disk, let the reflow copy some of the damaged data in odd-sized chunks
until a block of the file straddles the reflow offset, then scrub with
the reflow paused. The scrub must find no data errors and the file
must read back intact; after the expansion finishes, a second scrub
must repair nothing.
[5 lines not shown]
ZTS: wait for the raidz reflow to reach its pause point
wait_raidz_expand_paused() returned once the "copied" figure of zpool
status was the same in two samples one second apart. Right after the
attach, the expansion first copies the start of the vdev to the scratch
area in a sync task, and until that is done nothing counts as reflowed:
status shows "1 / ... copied". On a slow disk this lasts longer than a
second, so the helper returned before the reflow had started. The tests
then exported the pool, and after the import the reflow copied towards
raidz_expand_max_reflow_bytes while they scrubbed a damaged pool, which
is not what they meant to test. raidz_expand_001_pos's first scrub
reports a permanent data error in CI this way now and then.
Wait until the reflowed bytes (zpool status -jp) have reached
raidz_expand_max_reflow_bytes and are unchanged in two samples, or the
expansion is no longer running.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
Reviewed-by: Tigerblue77 <37409593+tigerblue77 at users.noreply.github.com>
[2 lines not shown]
raidz: hold the expansion rangelock until repair writes finish
A raidz read takes the expansion rangelock as a reader for its range in
vdev_raidz_io_start(), so the reflow cannot copy those rows while the
read uses their locations. vdev_raidz_io_done() released the lock at
its end, but the repair writes it issues for damaged columns (and the
scrub's shadow writes) are only started there with zio_nowait(); they
complete later. The reflow could then take the range, copy the rows
before the repairs reached the disk, and advance past them. A repair
that lands afterwards writes to a location the reflow may already have
filled with other data in the expanded layout.
With damage on as many disks as there is parity, a scrub during an
expansion then reported permanent data errors (raidz_expand_scrub_repair
failed 20 of 20 runs). raidz_expand_001_pos, which scrubs such a pool
during a paused expansion, fails now and then in CI with the same
signature: a permanent error from the first scrub, with only nparity
disks zeroed.
[8 lines not shown]
ZTS: scrub repairs during a running raidz expansion
A scrub that runs while a raidz expansion is copying data can report
permanent data errors on a pool with no more damage than parity can
repair, and leaves damage behind that a later scrub has to repair
again.
Add raidz_expand_scrub_repair: fill a raidz3 pool, attach a disk with
the reflow paused, then three times zero the data area of three disks
while the pool is exported, import it, start a scrub and only then let
the reflow copy another 20% of the data. Each scrub must find no data
errors, and a final scrub after the expansion must repair nothing.
The test checks that the reflow stopped at each pause point, and that
it made progress during at least one of the scrubs: it checks its pause
point once a second, so a short scrub can finish before it resumes (on
FreeBSD about one scrub in four does); the test is skipped if that
happens to all three.
Reviewed-by: Brian Behlendorf <behlendorf1 at llnl.gov>
[3 lines not shown]
RuntimeLibcalls: Add signatures for floating point comparison libcalls
The three-way and unordered comparisons return libgcc_cmp_return. This
is the word size with a few exceptions.
Co-authored-by: Claude Opus 5.5 <noreply at anthropic.com>
java/apache-commons-lang: Remove expired port
2026-10-31 java/apache-commons-lang: Unpatched CVE, last release in 2011, does not compile with Java 11+, not actively maintained. Superseded by port java/apache-commons-lang3.
textproc/lucene: Remove expired port
2026-10-31 textproc/lucene: Release from 2013. Unsupported upstream. Lucene is now at version 10.X. Superseded in ports by textproc/lucene9.
[ARM] Enable SlotIndexes compaction by default
Greedy measures live ranges in slot indexes, and the entries left by
instructions erased before allocation make some ranges look longer than
they are. Opt ARM into dropping those entries, as was done for AMDGPU,
so allocation reflects the code actually being allocated.
The test updates are register assignment and spill placement changes.