NAS-140407 / 26.0.0-BETA.2 / Fix FC/iSCSI path availability during ALUA failover (by bmeagherix) (by bugclerk) (#18585)
Fixes FC/iSCSI path availability during HA failover when ALUA is
enabled.
Four independent problems caused paths to drop or I/O to fail during the
`dev_disk` -> `dev_vdisk` LUN swap window:
- **FC path death**: HA iSCSI session logout cascaded through SCST and
removed LUN mappings before the LUN swap, destroying the ALUA tgt_dev
filter and causing LUN NOT SUPPORTED on FC. Fixed by deferring
`reset_active` to after `become_active` has replaced all LUN mappings.
- **90-second global drain**: `activate_extents` wrote `active=1` via
sysfs, triggering `scst_suspend_activity(90s)`. Fixed by removing the
job entirely - `bind_alua_state=1` already handles dev_vdisk file-open
drain-free via `blockio_on_alua_state_change_finish`.
- **LUN replace blocks on in-flight commands**: `scst_acg_repl_lun`
[34 lines not shown]
NAS-140407 / 27.0.0-BETA.1 / Fix FC/iSCSI path availability during ALUA failover (by bmeagherix) (#18576)
Fixes FC/iSCSI path availability during HA failover when ALUA is
enabled.
Four independent problems caused paths to drop or I/O to fail during the
`dev_disk` -> `dev_vdisk` LUN swap window:
- **FC path death**: HA iSCSI session logout cascaded through SCST and
removed LUN mappings before the LUN swap, destroying the ALUA tgt_dev
filter and causing LUN NOT SUPPORTED on FC. Fixed by deferring
`reset_active` to after `become_active` has replaced all LUN mappings.
- **90-second global drain**: `activate_extents` wrote `active=1` via
sysfs, triggering `scst_suspend_activity(90s)`. Fixed by removing the
job entirely - `bind_alua_state=1` already handles dev_vdisk file-open
drain-free via `blockio_on_alua_state_change_finish`.
- **LUN replace blocks on in-flight commands**: `scst_acg_repl_lun`
[21 lines not shown]
[X86] Improve illegal return type handling in FastISel (#186723)
Previously, FastISel would fall back to DAG ISel for any illegal return
type. This change adds a more precise check to determine if the ABI
requires a type conversion that FastISel cannot handle.
For example, bfloat is returned as f16 in XMM0, but FastISel would
assign f32 register type and store it in FuncInfo.ValueMap, causing DAG
to incorrectly perform type conversion from f32 to bfloat later.
However, i1 is promoted to i8 and returned as i8 per the ABI, so
FastISel
can safely lower it without switching to DAGISel. This change enables
FastISel to handle such cases properly.
---------
Co-authored-by: Yuanke Luo <ykluo at birentech.com>
(cherry picked from commit 140adc92d509eeba74dc9d67d8d7bfdf1c485fc7)
mu: update to 1.14.0
Packaging changes:
- reflect the new requirements
- when buliding for 'guile', it will now use mu's 'scm' which still
uses guile but will soon use it's own scheme dialect
Upstream changes:
- updated requirements:
- require C++20
- require glib & friend: 2.80
- require xapian 1.4.22
- emacs 28.1 (for mu4e)
- warn for deprecated guile (use scm)
- a number of code-cleanups since we can use C++20 now
- indexing: substantial speed-up of the clean-up phase
- scm: support the --eval command-line option
- mu4e: improve message rendering; get rid of some the unnecessary
body-part mime indication noise
[2 lines not shown]
[AccelTable] Pre-compute entry pool offsets for DW_IDX_parent. NFC (#188915)
After PR #150846 changed MCFragment to use fixed 16KB blocks, large
sections like .debug_names produce thousands of fragments. The
DW_IDX_parent emission called emitLabelDifference(ParentSymbol,
EntryPool, 4) per entry, which fell through to
attemptToFoldSymbolOffsetDifference's O(n) fragment walk when symbols
were in different fragments. This caused O(entries * fragments)
quadratic behavior, regressing dsymutil on large binaries like clang.
Fix by pre-computing byte offsets from EntryPool for each entry in a
first pass, then emitting emitInt32(offset) directly for DW_IDX_parent
instead of symbol differences. This also eliminates per-entry MCSymbol
allocation that was only needed for parent references.
Fix #188376
(cherry picked from commit 0f63c0a3a5fa5ed41c1a53ef8520f88c280c5c78)
pfctl: parser must not ignore error from pfctl_optimize_ruleset()
Ignoring the error may cause pfctl(8) to load inconsistent ruleset
preventing pf(4) to enforce desired policy.
Issue reported and fix suggested by berts _from_ fastmail _dot_ com
'Looks good.' @deraadt
MFC after: 1 week
Obtained from: OpenBSD, sashan <sashan at openbsd.org>, 9fd28a8cca
Sponsored by: Rubicon Communications, LLC ("Netgate")
(cherry picked from commit 343ace42f82a629374af4dc3a72da5f46f2c3feb)
[lit] Stop holding subprocess objects open in TimeoutHelper (#186712)
Tweak TestRunner's TimeoutHelper storage to hold only PIDs rather
than the whole process object. Holding the object causes many pipes to
stay open, when all we need is the pid.
Addresses #185941
(cherry picked from commit 202ef22faeb1c2a7b5846a446e8c8dfe579d7c29)
[lit] dealloc ApplyResult objects as they're waited on (#188642)
In _wait_for(), all async tasks are waited for. However, the objects
are held in the async_result list until the function calls complete.
This leads to about 3.6gig mem usage on my system when running
check-llvm, even though these objects aren't needed after the ar.get()
call.
Dealloc them as we go instead.
Addresses #188641
(cherry picked from commit b7d8831f8c432db97e5fcd5acdc470e7a82c92b2)
[lit] Explicitly unset timer to free thread stack (#188717)
Currently the virtual address space usage of lit fluctuates wildly, with
peak usage exceeding 4GB, which results in subsequent thread spawning
errors on 32-bit systems.
The cause of this is a circular reference in TimeoutHelper._timer (via the
callback), which causes the 8MB thread stack to not be immediately
reclaimed when the timer is cancelled.
We can avoid this by explicitly unsetting the timer.
(cherry picked from commit dfefc03769f58d8982202276cd3381356da12dfe)
[LoongArch] Fix incorrect reciprocal sqrt estimate semantics (#187621)
The current implementation of getSqrtEstimate() has incorrect semantics
when using `FRSQRTE`.
`FRSQRTE` computes an approximation to 1/sqrt(x), but the existing code
multiplies the estimate by the operand when Reciprocal is true. This
results in returning sqrt(x) instead of 1/sqrt(x), effectively reversing
the intended semantics of the 'Reciprocal' flag.
Additionally, the implementation does not properly account for LLVM's
Newton-Raphson refinement pipeline. When refinement steps are requested,
the initial estimate must be in reciprocal form so that the generic
DAGCombiner can apply NR iterations correctly.
This patch fixes the behavior by:
- Returning the raw FRSQRTE result when Reciprocal is true, or when
refinement steps are required.
[16 lines not shown]
[MC,clang] Fix -Wa,--noexecstack not emitting .note.GNU-stack (#187880)
AsmPrinter (clang -c a.c) and AsmParser (clang -c a.s, llvm-mc
-filetype=obj a.s) have different ways to emit .note.GNU-stack section.
913c5b4d1fff removed a redundant initSections call from cc1as, but
that was the only place where NoExecStack was consumed for the
assembler path.
Unify the .note.GNU-stack emission in MCELFStreamer::finishImpl,
making the `initSections` parameter redundant.
Add a -filetype=obj test for Solaris (see
https://reviews.llvm.org/D159179), which doesn't use .note.GNU-stack
`initSections` has 20+ uses. The parameter cleanup will be deferred to a
subsequent change.
Fixes https://github.com/llvm/llvm-project/issues/186004
[ARM] Fix incorrect post increment from Or (#188036)
If a Or is detected by findPointerConstIncrement but not by
getPointerConstIncrement it could use an invalid increment for the
offset. Protect against cases where getPointerConstIncrement cannot
return a valid offset.
Fixes #185677
(cherry picked from commit 5012b76ae273790340283084a3d0de96aeb54866)
[HLSL] Fix up Texture2D-mips-errors test
The Texture2D-mips-errors test was supposed to test for an error when the mips
types are used as templates. It was initially disabled because of a
crash. On further investigation, the crash was related to int2(0,0), and
not the mips type.
Follow-up issue for the int2(0,0) crash: #189086
Fixes #188556
[HLSL] Add CalculateLevelOfDetail methods to Texture2D
This adds the CalculateLevelOfDetail and CalculateLevelOfDetailUnclamped
methods to Texture2D using the establish pattern used for other methods.
Assisted-by: Gemini
[SPIRV] Implement the int_spv_resource_calculate_lod* IntrinsicsSPIRV
Implements intrinsics used to get the level-of-detail given a texture,
sampler, and a coordinate. It will be used to implement the
corresponding HLSL methods.
Assisted-by: Gemini
[HLSL] Implement Texture2D::mips[][] (#186143)
We implement the Textur2D::mips[][] method. We follow the design in DXC.
There is a new member called `mips` with type mips_type. The member will
contain a copy of the handle for the texture.
The type `mips_type` will have a member function `operator[]` that takes
a level, and returns a `mips_slice_type`. The slice will contain the
handle and the level. It also has an operator[] member function that
take a coordinate. It will do a load from the handle with the level and
coordinate, and return that value.
Assisted-by: Gemini
[AArch64] Use an unknown size for memcpy ops with non-constant sizes. (#187445)
The previous value of 0 was allowing loads to move past the mops
operations where it is not valid. Use a LocationSize::afterPointer()
size instead.
The GISel lowering currently loses the MMO, which is fine as it should
be conservatively treated as a load/store to any location.
(cherry picked from commit 441790b31f06ed2300e0e8d74f3bdf446bc105aa)