NAS-141531 / 25.10.5 / more zpool status checks in failover (#19203)
These changes make the standby transition fail closed so a controller
never releases its disks while a pool might still be imported.
When a controller demotes to standby it exports its pools and then stops
fencing to make the disks available to the other controller. The old
code exported each pool on a best effort basis and skipped any pool that
reported a status of OFFLINE. In rare cases a pool can report OFFLINE
while it is in fact still imported, so the old code could stop fencing
and release the disks while a pool was still attached. That is a fail
open scenario because the other controller could then import the same
pool at the same time, which can lead to data corruption.
The new code attempts to export every pool and then confirms the outcome
before releasing fencing. It checks each pool again using a lockless
read of the kernel kstat namespace, which reflects whether a pool is
actually present rather than what state it reports. If any pool is still
imported, or the export is still running past its timeout, or the import
[13 lines not shown]
[flang][acc] Avoid assert for assumed-size arrays without a descriptor (#205726)
Example:
```fortran
subroutine sub(a, n)
real(8) :: a(n, *)
integer :: n, i
!$acc data no_create(a)
!$acc parallel loop
do i = 1, n
a(1, i) = 0.0d0
end do
!$acc end data
end subroutine
```
An assumed-size dummy array (e.g. `real(8) :: a(n,*)`) has an unknown
trailing extent and is passed without a descriptor. When the OpenACC
implicit-data pass builds a data clause for such an array,
`generateSeqTyAccBounds` enters the unknown-shape branch but finds no
[11 lines not shown]
NAS-141461 / 26.0.0-RC.1 / Clear stale SMB locked-dataset alert after boot unlock (#19198)
## Problem
A false-positive `ShareLocked` alert ("SMB share ... is unavailable
because it uses a locked dataset") persists after boot for SMB shares on
an encrypted dataset, even though the dataset is unlocked and the share
works. Seen on 26.0.0-BETA.2 after upgrading from 25.10.4.
## Root cause
`generate_smb_configuration` (added in #18701) creates a `ShareLocked`
one-shot alert for locked shares but never clears it for unlocked ones.
At boot, SMB config is generated before encrypted pools are unlocked, so
the alert is created while the share looks locked. The only path that
clears it on unlock (`unlock_handle_attachments -> start() ->
remove_alert`) is skipped at boot because `unlock_on_boot_impl` unlocks
with `toggle_attachments=False`. Since the alert is
`deleted_automatically = False`, it sticks forever.
[15 lines not shown]
Revert "[mlir][vector] add consistent stride verification to `masked load/store` and `gather/scatter` ops" (#205832)
Reverts llvm/llvm-project#204842. That PR breaks the following two
tests:
* `mlir/test/Integration/Dialect/SparseTensor/CPU/reshape_dot.mlir.test`
*
`mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_coo_test.mlir.test`
[LLVM][Intrinsics] Fix `llvm_anyptr_ty` to disallow vector of pointers (#205806)
`llvm_anyptr_ty` should only allow scalar pointer types and disallow
vector of pointers; fix the vector constraint for `llvm_anyptr_ty`
accordingly. This fixes a regression in `llvm_anyptr_ty` that was
introduced in https://github.com/llvm/llvm-project/pull/203506.
Added a unit test to verify that use of a vector of pointers for
`llvm_anyptr_ty` fails verification.
[NVPTX] Fold symbol addresses into memory operands (#202379)
SelectionDAG can fold a symbol address (a kernel parameter, global
variable, or external symbol) directly into a memory instruction's
address operand, but only within a single basic block. When the address
crosses a block boundary, ISel materializes it with `MOV_B{32,64}_sym`
and the memory instruction becomes register-relative:
```ptx
mov.b64 %rd1, kernel_param_0;
ld.param.b64 %rd2, [%rd1];
ld.param.b64 %rd3, [%rd1+8];
```
instead of:
```
ld.param.b64 %rd2, [kernel_param_0];
ld.param.b64 %rd3, [kernel_param_0+8];
[21 lines not shown]
[docs] Enforce unambiguous toctree in llvm/docs (#203967)
It seems like using a non-`hidden` `toctree` for page navigation is a
bit of a trap, in that every doc must have a single unique path through
the global toctree to the root doc, and it is very easy to end up with
multiple.
This patch tries to address the warnings (actually infos, hence why it
does not fail the build) in llvm/docs/.
I tried to preserve the documents as-is, by hiding `toctree`s and
instead using lists of `{doc}` forms where the `toctree` was visible
before.
The only visual change in the resulting HTML is that the link is now
underlined where it wasn't before.
I also nested the `Tutorials` section in GISel Porting document, and
didn't link to it directly as the title is a bit ambiguous without the
[11 lines not shown]
[lldb] Return an empty extractor for unmappable subset requests (#205596)
DataExtractor::GetSubsetExtractorSP always returns a valid, non-null
extractor, and every caller relies on that: they dereference the result
directly rather than checking for null. The VirtualDataExtractor
override broke this contract. When the requested range had no backing in
the lookup table (e.g. the virtual offset fell in a gap, or the range
crossed an entry boundary) it returned an empty shared_ptr, turning each
caller's dereference into a null-pointer access.
It also asserted on those cases. But the offsets passed to a subset
request are derived from parsed file contents, which may be truncated or
inconsistent. A range that cannot be mapped is therefore ordinary input,
not a programming error, and must not abort an assertions-enabled build.
Return a valid but empty extractor instead. Reads see zero bytes and the
caller's existing size checks skip the data, matching the graceful
degradation the base class already provides for out-of-range offsets.
Assisted-by: Claude
NAS-141530 / 25.10.5 / dont swallow errors in zfs.pool.query (#19200)
Historically *any* libzfs error here was silently swallowed to an empty
result, which (depending on the caller) can have painful side-effects --
e.g. a transient/live zpool error gets interpreted as "no such pool". A
genuinely missing pool (NOENT) is expected and benign (the pool is
simply exported/not imported), so we ignore that one, but we log every
other error so we retain breadcrumbs for the rare edge-cases.
[IR] Don't match icmp+select as min/max (#205595)
Since some time, we canonicalize integer min/max as intrinsics. Remove
the detection of icmp+select as min/max from the pattern matchers. These
matchers were quite expensive but, due to canonicalization, were almost
never hit.
Test updates are largely canonicalization of the input to use intrinics
instead of icmp+select. (Manual work, we unfortunately don't have a tool
to canonicalize the test input.)
[AArch64] Preserve SDNode flags when lowering fixed vectors to scalable operations (#204616)
Preserve the original SDNode flags when LowerToScalableOp rebuilds fixed-length vector operations using their scalable container type. This allows combines to use flag information generated before the scalable was created.