Skip to content

fix(virtio-fs): send the parent node in create, mkdir, unlink and rmdir - #2780

Merged
jounathaen merged 2 commits into
hermit-os:mainfrom
stlankes:fuse
Nov 10, 2026
Merged

jounathaen merged 2 commits into
hermit-os:mainfrom
stlankes:fuse

Conversation

@stlankes

@stlankes stlankes commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

virtiofsd resolves these names relative to the parent node, so a full path below the root node refers to the root of the host.

See also the description of unlink in

https://libfuse.github.io/doxygen/structfuse__lowlevel__ops.html

It defines parent as inode number of the parent directory.

@github-actions github-actions Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Benchmark Results

Details
Benchmark Current: 1312948 Previous: 2e23902 Performance Ratio
startup_benchmark Build Time 90.04 s 80.34 s 1.12 ❗
startup_benchmark File Size 0.80 MB 0.80 MB 1.00 ❗
Startup Time - 1 core 0.73 s (±0.02 s) 0.75 s (±0.02 s) 0.98
Startup Time - 2 cores 0.75 s (±0.02 s) 0.74 s (±0.02 s) 1.02
Startup Time - 4 cores 0.76 s (±0.03 s) 0.74 s (±0.02 s) 1.03
multithreaded_benchmark Build Time 90.71 s 82.11 s 1.10 ❗
multithreaded_benchmark File Size 0.89 MB 0.86 MB 1.04 ❗
Multithreaded Pi Efficiency - 2 Threads 84.95 % (±9.18 %) 85.89 % (±6.61 %) 0.99
Multithreaded Pi Efficiency - 4 Threads 43.34 % (±3.05 %) 43.43 % (±2.56 %) 1.00
Multithreaded Pi Efficiency - 8 Threads 25.91 % (±1.53 %) 25.76 % (±1.53 %) 1.01
micro_benchmarks Build Time 88.77 s 80.40 s 1.10 ❗
micro_benchmarks File Size 0.89 MB 0.86 MB 1.04 ❗
Scheduling time - 1 thread 68.59 ticks (±3.35 ticks) 62.65 ticks (±4.06 ticks) 1.09 ❗
Scheduling time - 2 threads 38.33 ticks (±4.71 ticks) 34.08 ticks (±4.10 ticks) 1.12
Micro - Time for syscall (getpid) 3.71 ticks (±0.70 ticks) 3.45 ticks (±0.58 ticks) 1.08
Memcpy speed - (built_in) block size 4096 78704.15 MByte/s (±54570.55 MByte/s) 82448.38 MByte/s (±56997.13 MByte/s) 0.95
Memcpy speed - (built_in) block size 1048576 30099.09 MByte/s (±24364.02 MByte/s) 30585.98 MByte/s (±24707.84 MByte/s) 0.98
Memcpy speed - (built_in) block size 16777216 26494.15 MByte/s (±21945.82 MByte/s) 26340.06 MByte/s (±21720.96 MByte/s) 1.01
Memset speed - (built_in) block size 4096 78909.86 MByte/s (±54685.11 MByte/s) 82292.76 MByte/s (±56891.50 MByte/s) 0.96
Memset speed - (built_in) block size 1048576 30816.93 MByte/s (±24781.61 MByte/s) 31323.85 MByte/s (±25145.86 MByte/s) 0.98
Memset speed - (built_in) block size 16777216 27157.68 MByte/s (±22319.64 MByte/s) 27104.68 MByte/s (±22209.94 MByte/s) 1.00
Memcpy speed - (rust) block size 4096 71395.42 MByte/s (±50048.68 MByte/s) 74097.96 MByte/s (±51811.44 MByte/s) 0.96
Memcpy speed - (rust) block size 1048576 30031.23 MByte/s (±24452.16 MByte/s) 30361.60 MByte/s (±24602.37 MByte/s) 0.99
Memcpy speed - (rust) block size 16777216 26245.09 MByte/s (±21819.89 MByte/s) 27625.34 MByte/s (±22806.88 MByte/s) 0.95
Memset speed - (rust) block size 4096 71818.25 MByte/s (±50362.86 MByte/s) 74373.47 MByte/s (±51976.48 MByte/s) 0.97
Memset speed - (rust) block size 1048576 30766.61 MByte/s (±24870.20 MByte/s) 31110.89 MByte/s (±25033.24 MByte/s) 0.99
Memset speed - (rust) block size 16777216 26909.25 MByte/s (±22195.65 MByte/s) 28386.93 MByte/s (±23265.03 MByte/s) 0.95
alloc_benchmarks Build Time 82.94 s 74.76 s 1.11 ❗
alloc_benchmarks File Size 0.87 MB 0.87 MB 1.00 ❗
Allocations - Allocation success 91.35 % 91.31 % 1.00 ❗
Allocations - Deallocation success 100.00 % 100.00 % 1
Allocations - Pre-fail Allocations 61.61 % 61.44 % 1.00 ❗
Allocations - Average Allocation time 9215.47 Ticks (±207.54 Ticks) 5860.58 Ticks (±98.43 Ticks) 1.57 ❗
Allocations - Average Allocation time (no fail) 9605.08 Ticks (±181.87 Ticks) 6554.81 Ticks (±92.86 Ticks) 1.47 ❗
Allocations - Average Deallocation time 1447.89 Ticks (±359.27 Ticks) 1805.01 Ticks (±250.35 Ticks) 0.80
mutex_benchmark Build Time 85.25 s 79.82 s 1.07 ❗
mutex_benchmark File Size 0.89 MB 0.86 MB 1.04 ❗
Mutex Stress Test Average Time per Iteration - 1 Threads 12.70 ns (±0.73 ns) 12.10 ns (±0.41 ns) 1.05
Mutex Stress Test Average Time per Iteration - 2 Threads 89.60 ns (±8.94 ns) 40.26 ns (±1.68 ns) 2.23 ❗

This comment was automatically generated by workflow using github-action-benchmark.

@jounathaen jounathaen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Please also ensure that this case is tested in the CI

virtiofsd resolves these names relative to the parent node, so a full
path below the root node refers to the root of the host.

See also the description of unlink in

https://libfuse.github.io/doxygen/structfuse__lowlevel__ops.html

It defines `parent` as inode number of the parent directory.
@github-actions github-actions Bot added the ci label Nov 10, 2026
@stlankes

Copy link
Copy Markdown
Contributor Author

@jounathaen I added some fuse tests (hermit-os/hermit-rs#1111) and my latest commit use these tests to test my PR.

@jounathaen
jounathaen added this pull request to the merge queue Nov 10, 2026
Merged via the queue into hermit-os:main with commit 746de76 Nov 10, 2026
24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants