Skip to content

u-boot: v2026.01: fix BTRFS zstd decompression failure (error 70)#9651

Merged
igorpecovnik merged 2 commits into
armbian:mainfrom
iav:fix/uboot-btrfs-zstd-decompression
Apr 14, 2026
Merged

u-boot: v2026.01: fix BTRFS zstd decompression failure (error 70)#9651
igorpecovnik merged 2 commits into
armbian:mainfrom
iav:fix/uboot-btrfs-zstd-decompression

Conversation

@iav

@iav iav commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Fix zstd decompression in U-Boot when booting from a BTRFS partition with zstd compression
  • The generic zstd_decompress() wrapper in lib/zstd/zstd.c fails for BTRFS extents due to two sector-alignment mismatches
  • Call zstd_decompress_dctx() directly with zstd_find_frame_compressed_size() to strip input padding and ZSTD_getFrameContentSize() to handle output buffer size mismatch
  • Patch applies to both v2026.01 and v2025.10 (fs/btrfs/compression.c is identical)
  • The patch may also apply to v26.04, but I haven't tested it on real hardware.

Root cause

  1. Sector-aligned compressed size: BTRFS stores compressed extents padded to sector boundaries (4096 bytes). zstd_decompress_dctx() rejects trailing data after the zstd frame, breaking regular (non-inline) extents.

  2. Sector-aligned decompressed size: BTRFS compresses in sector-sized blocks, so the zstd frame content size may exceed ram_bytes from extent metadata (e.g. a 3906-byte file is compressed as a 4096-byte block). zstd_decompress_dctx() returns ZSTD_error_dstSize_tooSmall (error 70) for inline extents.

Symptoms:

zstd_decompress: failed to decompress: 70
BTRFS: An error occurred while reading file /boot/boot.scr

Testing done

  • Helios64 (RK3399), U-Boot v2026.01, SD card with BTRFS + zstd compression
  • Helios4 (Marvell A388), U-Boot v2025.10, BTRFS + zstd — boots successfully
  • boot.scr, armbianEnv.txt (inline extents) read successfully
  • Image (37MB), DTB (90KB), uInitrd (30MB) (regular compressed extents) read successfully
  • Kernel starts, system boots to login prompt

🤖 Assisted by Claude Code

Summary by CodeRabbit

  • Bug Fixes
    • Fixed BTRFS zstd decompression handling for properly processing sector-aligned padding and oversized buffers in U-Boot v2025.10 and v2026.01, improving compatibility with compressed BTRFS filesystems.

@iav iav requested a review from prahal as a code owner April 10, 2026 21:32
@coderabbitai

coderabbitai Bot commented Apr 10, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (1)
  • Needs review

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8be09bdd-2d70-4681-86ba-f5a65ff0080e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Replaces Btrfs Zstd decompression to use libzstd dctx APIs: detect exact frame compressed/content sizes, strip sector padding, optionally allocate temp output and workspace, perform decompression with a zstd dctx, and return -1 on errors.

Changes

Cohort / File(s) Summary
BTRFS Zstd Decompression
fs/btrfs/compression.c, patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch, patch/u-boot/v2025.10/board_helios4/general-fix-btrfs-zstd-decompression.patch, patch/u-boot/v2025.10/general-fix-btrfs-zstd-decompression.patch
Reworks static decompress_zstd() to call zstd_find_frame_compressed_size() to trim Btrfs sector padding, use ZSTD_getFrameContentSize() to size outputs, allocate temporary output if frame > requested dlen, allocate workspace via zstd_dctx_workspace_bound(), init dctx with zstd_init_dctx(), call zstd_decompress_dctx(), copy back dlen bytes when using a temp buffer, and return -1 on allocation or decompression errors.

Sequence Diagram(s)

sequenceDiagram
    participant Caller
    participant decompress_zstd
    participant Allocator
    participant libzstd
    Caller->>decompress_zstd: call(ibuf, clen, dbuf, dlen)
    decompress_zstd->>libzstd: zstd_find_frame_compressed_size(ibuf, clen)
    libzstd-->>decompress_zstd: frame_compressed_size / error
    decompress_zstd->>decompress_zstd: adjust clen (strip padding)
    decompress_zstd->>libzstd: ZSTD_getFrameContentSize(ibuf)
    libzstd-->>decompress_zstd: frame_decompressed_size
    alt frame_decompressed_size known and > dlen
        decompress_zstd->>Allocator: malloc(temp_out, frame_decompressed_size)
        Allocator-->>decompress_zstd: temp_out / NULL
    end
    decompress_zstd->>Allocator: malloc(workspace, zstd_dctx_workspace_bound())
    Allocator-->>decompress_zstd: workspace / NULL
    decompress_zstd->>libzstd: zstd_init_dctx(workspace)
    libzstd-->>decompress_zstd: dctx / error
    decompress_zstd->>libzstd: zstd_decompress_dctx(dctx, ibuf, clen, outbuf, outlen)
    libzstd-->>decompress_zstd: success / error
    alt success and temp_out used
        decompress_zstd->>Allocator: memcpy(dbuf, temp_out, dlen)
        decompress_zstd->>Allocator: free(temp_out)
    end
    decompress_zstd->>Allocator: free(workspace)
    decompress_zstd-->>Caller: return dlen or -1
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰
I sniffed the frame beneath the padded bed,
Pulled out its size, then gently spread,
A tiny workspace, dctx spun with care,
I hopped with bytes, half-copied to share,
Crunchy frames for supper — decompressed with flair!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title directly identifies the main fix: addressing BTRFS zstd decompression error 70 in U-Boot v2026.01, which aligns with the primary objective of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions github-actions Bot added size/medium PR with more then 50 and less then 250 lines Needs review Seeking for review Hardware Hardware related like kernel, U-Boot, ... Patches Patches related to kernel, U-Boot, ... 05 Milestone: Second quarter release labels Apr 10, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch (1)

79-81: Consider size_t truncation on 32-bit platforms.

fcs is unsigned long long but malloc() takes size_t. On 32-bit systems where size_t is 32 bits, values > 4GB would truncate. While unlikely for BTRFS extents in practice (typical max extent size is 128MB), a defensive check could prevent unexpected behavior:

🛡️ Optional: Add size overflow check
 	if (fcs != ZSTD_CONTENTSIZE_ERROR &&
 	    fcs != ZSTD_CONTENTSIZE_UNKNOWN && fcs > dlen) {
+		if (fcs > SIZE_MAX)
+			return -1;
 		tmp = malloc(fcs);
 		if (!tmp)
 			return -1;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch`
around lines 79 - 81, The allocation uses malloc(tmp = malloc(fcs)) where fcs is
an unsigned long long and malloc takes size_t, so on 32-bit platforms fcs may
truncate; add a defensive size overflow check before calling malloc: verify fcs
<= (size_t)-1 (or SIZE_MAX) and fail fast (return -1) if it exceeds, then cast
fcs to size_t when calling malloc for tmp; reference symbols: fcs, tmp,
malloc().
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch`:
- Around line 79-81: The allocation uses malloc(tmp = malloc(fcs)) where fcs is
an unsigned long long and malloc takes size_t, so on 32-bit platforms fcs may
truncate; add a defensive size overflow check before calling malloc: verify fcs
<= (size_t)-1 (or SIZE_MAX) and fail fast (return -1) if it exceeds, then cast
fcs to size_t when calling malloc for tmp; reference symbols: fcs, tmp,
malloc().

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 011b3518-0333-4433-a861-0fed3835b12a

📥 Commits

Reviewing files that changed from the base of the PR and between 4cd04e6 and 23601bd.

📒 Files selected for processing (1)
  • patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch

@iav iav force-pushed the fix/uboot-btrfs-zstd-decompression branch from b4c330a to 2e91b75 Compare April 10, 2026 21:56

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch`:
- Around line 53-56: The out_len variable is declared as u32 which can truncate
64-bit frame sizes (fcs); change its type to size_t (e.g., replace "u32 out_len
= dlen;" with "size_t out_len = dlen;") and update any subsequent assignments
from fcs (e.g., when doing "out_len = fcs;") to use size_t (cast if necessary:
"out_len = (size_t)fcs;") so the decompression call receives the full 64-bit
capacity; ensure any other uses of out_len match size_t semantics.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 222d1f07-33d1-4207-b8e2-441e709bf5c9

📥 Commits

Reviewing files that changed from the base of the PR and between 23601bd and b4c330a.

📒 Files selected for processing (1)
  • patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch

Comment thread patch/u-boot/v2026.01/board_helios64/general-fix-btrfs-zstd-decompression.patch Outdated
@iav iav force-pushed the fix/uboot-btrfs-zstd-decompression branch from 2e91b75 to c644580 Compare April 10, 2026 22:06
@iav iav added the Bugfix Pull request is fixing a bug label Apr 10, 2026
@github-actions github-actions Bot added size/large PR with 250 lines or more and removed size/medium PR with more then 50 and less then 250 lines labels Apr 13, 2026
iav added 2 commits April 14, 2026 17:13
U-Boot's generic zstd_decompress() wrapper fails when used by BTRFS
due to two sector-alignment mismatches:

1. Compressed extents are stored padded to sector boundaries (4096),
   but zstd_decompress_dctx() rejects trailing data after the frame.

2. BTRFS compresses in sector-sized blocks, so the zstd frame content
   size may exceed ram_bytes. When the output buffer is sized to
   ram_bytes, zstd_decompress_dctx() returns dstSize_tooSmall (error 70).

Symptoms on zstd-compressed BTRFS partition:

  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

Fix by calling zstd_decompress_dctx() directly with:
- zstd_find_frame_compressed_size() to strip sector padding from input
- ZSTD_getFrameContentSize() to allocate a larger output buffer when
  the frame decompresses beyond the caller's buffer size

Tested on Helios64 (RK3399) booting from BTRFS+zstd SD card.
Same patch as v2026.01 — fs/btrfs/compression.c is identical.
Tested on Helios4 (Marvell A388).

Placed in both board_helios4/ (board-specific BOOTPATCHDIR) and
v2025.10/ root (shared, for boards like rockpi-e, orangepi4-lts).
@iav iav force-pushed the fix/uboot-btrfs-zstd-decompression branch from 59c4a2b to 2c3c259 Compare April 14, 2026 14:14
@iav iav requested a review from EvilOlaf April 14, 2026 16:07
@github-actions github-actions Bot added the Ready to merge Reviewed, tested and ready for merge label Apr 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ This PR has been reviewed and approved — all set for merge!

@github-actions github-actions Bot removed the Needs review Seeking for review label Apr 14, 2026
@igorpecovnik igorpecovnik merged commit d4de476 into armbian:main Apr 14, 2026
1 check passed
@iav iav deleted the fix/uboot-btrfs-zstd-decompression branch April 14, 2026 21:26
iav added a commit to iav/armbian that referenced this pull request Apr 14, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 15, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 15, 2026
Per CodeRabbit review on PR armbian#9675:
  zstd_decompress_dctx() returns a size_t — the actual number of
  bytes written, not just an error indicator. The previous code
  unconditionally returned dlen even if ret < dlen, leaving the
  tail of dbuf as uninitialised garbage.

In practice this path is unreachable for well-formed BTRFS extents:
after our fix out_len = max(dlen, fcs), and on success zstd produces
exactly fcs bytes, so ret == fcs >= dlen. But the defensive check
is trivial and guards against:
  - a frame header with a falsified content-size that still passes
    the integrity check;
  - truncated/corrupted frames that zstd does not always flag as an
    error.

Apply the same fix to the duplicate patch under board_helios64/.

This issue was not flagged in PR armbian#9651 (v2026.01) — different
review pass surfaced different findings.
iav added a commit to iav/armbian that referenced this pull request Apr 15, 2026
Per CodeRabbit review on PR armbian#9675:
  zstd_decompress_dctx() returns a size_t — the actual number of
  bytes written, not just an error indicator. The previous code
  unconditionally returned dlen even if ret < dlen, leaving the
  tail of dbuf as uninitialised garbage.

In practice this path is unreachable for well-formed BTRFS extents:
after our fix out_len = max(dlen, fcs), and on success zstd produces
exactly fcs bytes, so ret == fcs >= dlen. But the defensive check
is trivial and guards against:
  - a frame header with a falsified content-size that still passes
    the integrity check;
  - truncated/corrupted frames that zstd does not always flag as an
    error.

Apply the same fix to the duplicate patch under board_helios64/.

This issue was not flagged in PR armbian#9651 (v2026.01) — different
review pass surfaced different findings.
@EvilOlaf

Copy link
Copy Markdown
Member

https://github.com/armbian/build/pull/9651/changes
Is this patch a duplicate? It looks like it resides in both the uboot patch folder and the Helios specific one?

@iav

iav commented Apr 15, 2026

Copy link
Copy Markdown
Contributor Author

Helios64 and Helios4 has separated folder with patches.

Is this patch a duplicate? It looks like it resides in both the uboot patch folder and the Helios specific one?

The patch framework (advanced_patch) for a given BOOTPATCHDIR automatically applies patches from /, /board_/, /target_/ and /branch_/. So a board_ subdirectory is picked up automatically when BOOTPATCHDIR points at the parent.

  • odroidm2 has BOOTPATCHDIR=v2025.10 — it gets both the root v2025.10/general-fix-btrfs-zstd-decompression.patch and v2025.10/board_odroidm2/ automatically.
  • helios4 has BOOTPATCHDIR=v2025.10/board_helios4 (set in config/sources/families/include/mvebu-helios4.inc:16). So the root v2025.10/*.patch is outside its BOOTPATCHDIR and is not applied — the framework only looks inside v2025.10/board_helios4/.
    That's why a copy had to be placed directly in v2025.10/board_helios4/ for helios4 to pick up the fix.

A cleaner solution would be to change helios4's BOOTPATCHDIR to v2025.10 (like odroidm2): then the root patch would apply, board_helios4/ would be picked up automatically, and the copy could be dropped. I didn't know why it was set up this way and didn't want to change it.

iav added a commit to iav/armbian that referenced this pull request Apr 17, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 17, 2026
Per CodeRabbit review on PR armbian#9675:
  zstd_decompress_dctx() returns a size_t — the actual number of
  bytes written, not just an error indicator. The previous code
  unconditionally returned dlen even if ret < dlen, leaving the
  tail of dbuf as uninitialised garbage.

In practice this path is unreachable for well-formed BTRFS extents:
after our fix out_len = max(dlen, fcs), and on success zstd produces
exactly fcs bytes, so ret == fcs >= dlen. But the defensive check
is trivial and guards against:
  - a frame header with a falsified content-size that still passes
    the integrity check;
  - truncated/corrupted frames that zstd does not always flag as an
    error.

Apply the same fix to the duplicate patch under board_helios64/.

This issue was not flagged in PR armbian#9651 (v2026.01) — different
review pass surfaced different findings.
iav added a commit to iav/armbian that referenced this pull request Apr 20, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 20, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 20, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 23, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 23, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
iav added a commit to iav/armbian that referenced this pull request Apr 24, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
igorpecovnik pushed a commit that referenced this pull request Apr 24, 2026
Same fix as #9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
mingzhangqun pushed a commit to Seeed-Studio/armbian-build that referenced this pull request May 29, 2026
Same fix as armbian#9651 for v2026.01 and v2025.10, applied to the common
patch/u-boot/v2026.04/ directory so all boards on U-Boot v2026.04 pick
it up (cm3588-nas, nanopct6, orangepi5, rock-3a, nanopi-r3s-lts,
mekotronics-*, mixtile-blade3, radxa-rock-4d, helios64 via its own
self-contained board_helios64 subdir already has a copy).

Without this, booting from a BTRFS rootfs with zstd-compressed extents
fails with:
  zstd_decompress: failed to decompress: 70
  BTRFS: An error occurred while reading file /boot/boot.scr

See commit 5617ff3 for the full rationale.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

05 Milestone: Second quarter release Bugfix Pull request is fixing a bug Hardware Hardware related like kernel, U-Boot, ... Patches Patches related to kernel, U-Boot, ... Ready to merge Reviewed, tested and ready for merge size/large PR with 250 lines or more

Development

Successfully merging this pull request may close these issues.

3 participants