Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 0 additions & 35 deletions issues/a-full-data-volume-frees-space-only-at-a-commit.md

This file was deleted.

23 changes: 0 additions & 23 deletions issues/a-guest-with-no-virtio-keeps-no-serial-when-its-run-reds.md

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ console's port (`toyos_build::vmconsole::UartSocket`). Where the 16550 is
QEMU's stdio, the console exists only in the harness's memory, so a red boot
of such a profile leaves no file.

A console-port boot's console is not kept either; only its UART is. Its
console is the virtio-serial port on QEMU's stdio, which the harness also
holds only in memory (`tests/common/qemu.rs`'s `read_consoles`), and its
`uart-<seq>.log` holds what the loader said and the lines the port cannot
carry.

Guest-rows 42010705757 reddened `acpi_press_is_one_sci`
(`Profile::HeadlessNoConsolePort`) with a STALL, and its `serial` artifact
held one file: lane-2's `uart-4.log`, a passing console-port boot of
Expand Down
19 changes: 0 additions & 19 deletions issues/a-refused-delete-has-already-thrown-the-file-away.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
status: open
kind: tooling
opened: 2026-11-11
---

# No test holds what a full DATA volume takes with no commit between

A bucket is written again only once its emptying is durable
(`lib/bcachefs/src/engine/mount/allocator.rs`), so on a volume its files
filled, the space an unlink frees is not free at once. `Mount::grant` does
not refuse a change for room while an emptying awaits durability (`settled`).

The engine's tests of a full volume commit between the two:
`a_full_data_volume_can_release_a_large_orphan_and_use_its_capacity_again`
(`lib/bcachefs/src/engine/tests/data.rs`) and
`a_full_volume_refuses_changes_by_name_and_still_removes_names_and_unmounts_clean`
(`lib/bcachefs/src/engine/tests/buckets.rs`). A scratch copy of the first
without its second commit, at 422915e2c, refused a 1 MiB write before the
unlink (`NoSpace`) and took it after the unlink and release. It is not
committed.

The second removes 21 names between two commits on a full volume, not every
file, and a removal's grant can still answer `NoSpace("no room left for the
btree nodes a removal may write")` (`Draw::Freeing` in `Mount::grant`). No
test removes every file of a full volume with no commit between.

## Exit condition

On a volume its files filled, host tests hold that an unlink and release
followed by a write of what it freed is accepted with no commit between them,
and so is a delete of every file on it. Each is red when the grant refuses
instead of waiting.
21 changes: 21 additions & 0 deletions issues/no-test-stages-a-delete-the-device-refuses.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
status: open
kind: tooling
opened: 2026-09-05
---

# No test stages a delete the device refuses

A delete that fails on the device has to leave the file as it was: its name,
its blocks, and every holder's view of it. The file server asks the volume
first and only then lets the open file go: DATA's `unlink`
(`system/fileserver/src/data.rs`) releases the file's blocks only after the
engine's unlink answered, and FAT's (`system/fileserver/src/fat.rs`) marks the
open file gone only after `remove` did. Nothing stages the refusal, so the
order is read off the code and not run. FAT's
`an_unlink_stopped_anywhere_is_recovered` stops the device for good and judges
the next mount, not a server that goes on answering.

**Exit**: a host test in `system/fileserver` whose disk refuses the reads or
writes a delete makes, and finds the name, the bytes and an open holder's
reads as they were before the refused call.
18 changes: 0 additions & 18 deletions issues/the-cxx-runtime-is-rebuilt-for-every-sysroot-key.md

This file was deleted.

8 changes: 6 additions & 2 deletions issues/the-cxx-runtime-is-rebuilt-with-every-sysroot.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ opened: 2026-09-30
`build/sysroot.rs` builds each target's libc++, libc++abi and libunwind into the
C sysroot after libc, so every change the sysroot key sees, an edit to
`sdk/abi/src`, `sdk/toyos/src` or libc's `src/` among them, configures and
builds both targets' runtimes again.
builds both targets' runtimes again. One item added to
`sdk/abi/src/clock.rs`, measured on the `wt/toyos-rebuild` branch, cost 27 s
and 38 s at load 41, and 47 s and 54 s at load 68.

The runtime is a function of the LLVM key, libc's `include/` and
`build/libcxx.rs` only if no configure probe links: the runtimes' `try_compile`
Expand All @@ -22,4 +24,6 @@ against today's before it is set.

**Exit**: with the probes shown not to need a link, the runtime is a store
product of its own, keyed on the LLVM key, libc's `include/` and
`build/libcxx.rs`, and a sysroot build takes it (the store is #629's).
`build/libcxx.rs`, and a sysroot build takes it (the store is #629's): one
item added to `sdk/abi/src/clock.rs` after a build, and the next
`cargo run -- --build-only` prints no `Building the C++ runtime`.