Skip to content

Conversation

@fatelei
Copy link
Collaborator

@fatelei fatelei commented Oct 26, 2025

feat: add ut and bump go to 1.25 and FUSE3: auto-detects fusermount or fusermount3; falls back to direct mount if neither found. Configurable modes: new flags --fs-file-mode, --fs-dir-mode, --fs-link-mode (octal, e.g. 0400/0500). Non-nydus clarity: returns ENOENT for diff on non-nydus layers; blob/info still available. Crash recovery: best-effort unmount of orphan bind mounts at startup."

@imeoer
Copy link
Collaborator

imeoer commented Oct 27, 2025

Thanks for the PR, we can start by fixing the broken CI and DCO check, and squashing commits. :)

Signed-off-by: fatelei <[email protected]>
…r fusermount3; falls back to direct mount if neither found. Configurable modes: new flags --fs-file-mode, --fs-dir-mode, --fs-link-mode (octal, e.g. 0400/0500). Non-nydus clarity: returns ENOENT for diff on non-nydus layers; blob/info still available. Crash recovery: best-effort unmount of orphan bind mounts at startup.

Signed-off-by: fatelei <[email protected]>
Signed-off-by: fatelei <[email protected]>
@nibble0x2
Copy link

was trying to run these changes locally with podman 4.9 and nydus 2.3.9 -

seems there is Loop between store/snapshotID/layerDigest/diff and rafs/snapshotId/mnt as stat command on /diff throw error Too many levels of symbolic links.

logs from sudo dmesg -w -

[177319.197683] INFO: task nydus-store:346306 blocked for more than 368 seconds.
[177319.197684]       Tainted: G           OE      6.8.0-88-generic #89-Ubuntu
[177319.197686] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[177319.197687] task:nydus-store    state:D stack:0     pid:346306 tgid:345647 ppid:291011 flags:0x00000002
[177319.197689] Call Trace:
[177319.197690]  <TASK>
[177319.197691]  __schedule+0x27c/0x6b0
[177319.197695]  schedule+0x33/0x110
[177319.197698]  d_alloc_parallel+0x30e/0x3e0
[177319.197701]  ? __pfx_default_wake_function+0x10/0x10
[177319.197704]  __lookup_slow+0x5c/0x130
[177319.197707]  walk_component+0x117/0x190
[177319.197710]  path_lookupat+0x6a/0x1b0
[177319.197713]  filename_lookup+0xe4/0x200
[177319.197718]  vfs_statx+0x95/0x1d0
[177319.197721]  vfs_fstatat+0xaa/0xe0
[177319.197723]  __do_sys_newfstatat+0x44/0x90
[177319.197727]  __x64_sys_newfstatat+0x1c/0x30
[177319.197730]  x64_sys_call+0x2505/0x25a0
[177319.197731]  do_syscall_64+0x7f/0x180
[177319.197734]  ? update_load_avg+0x82/0x850
[177319.197737]  ? update_load_avg+0x82/0x850
[177319.197739]  ? set_next_entity+0xd7/0x1a0
[177319.197741]  ? pick_next_task_fair+0x367/0x620
[177319.197744]  ? os_xsave+0x2e/0x70
[177319.197748]  ? rseq_get_rseq_cs+0x22/0x280
[177319.197751]  ? rseq_ip_fixup+0x90/0x1f0
[177319.197753]  ? restore_fpregs_from_fpstate+0x3d/0xd0
[177319.197756]  ? switch_fpu_return+0x55/0xf0
[177319.197757]  ? arch_exit_to_user_mode_prepare.isra.0+0x95/0xe0
[177319.197759]  ? irqentry_exit_to_user_mode+0x38/0x1e0
[177319.197761]  ? irqentry_exit+0x43/0x50
[177319.197763]  entry_SYSCALL_64_after_hwframe+0x78/0x80
[177319.197765] RIP: 0033:0x407d2e
[177319.197768] RSP: 002b:000000c0003e4c80 EFLAGS: 00000216 ORIG_RAX: 0000000000000106
[177319.197770] RAX: ffffffffffffffda RBX: ffffffffffffff9c RCX: 0000000000407d2e
[177319.197771] RDX: 000000c0005dec68 RSI: 000000c0000ca240 RDI: ffffffffffffff9c
[177319.197772] RBP: 000000c0003e4cc0 R08: 0000000000000000 R09: 0000000000000000
[177319.197773] R10: 0000000000000000 R11: 0000000000000216 R12: 000000c0000ca240
[177319.197774] R13: 0000000000000000 R14: 000000c0000a28c0 R15: 07ffffffffffffff
[177319.197777]  </TASK>
[230724.197402] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230777.595637] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230777.595764] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230784.210701] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230784.210936] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578002] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578916] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578998] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.538405] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.541827] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.542235] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230806.658285] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230806.658417] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230864.578949] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230864.579676] VFS: Lookup of 'diff' in fuse fuse would have caused loop

sorry I have limited understanding around these - but is it a right thing to do i.e binding between two FUSE (FUSE RAFS & FUSE store) mounts?

mount info -

nydusstore on /home/machine/git_projects/nydus-storage-plugin/temp/store type fuse.rawBridge (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other,max_read=131072)

rafs on /home/machine/git_projects/nydus-storage-plugin/temp/snapshots/bG9jYWxob3N0OjUwMDAvaGVsbG8td29ybGQ6bnlkdXMtMi4zLjk=/mnt type fuse (ro,nosuid,nodev,noatime,user_id=1000,group_id=1000,default_permissions,allow_other,max_read=1052672)

@fatelei
Copy link
Collaborator Author

fatelei commented Dec 14, 2025

was trying to run these changes locally with podman 4.9 and nydus 2.3.9 -

seems there is Loop between store/snapshotID/layerDigest/diff and rafs/snapshotId/mnt as stat command on /diff throw error Too many levels of symbolic links.

logs from sudo dmesg -w -

[177319.197683] INFO: task nydus-store:346306 blocked for more than 368 seconds.
[177319.197684]       Tainted: G           OE      6.8.0-88-generic #89-Ubuntu
[177319.197686] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[177319.197687] task:nydus-store    state:D stack:0     pid:346306 tgid:345647 ppid:291011 flags:0x00000002
[177319.197689] Call Trace:
[177319.197690]  <TASK>
[177319.197691]  __schedule+0x27c/0x6b0
[177319.197695]  schedule+0x33/0x110
[177319.197698]  d_alloc_parallel+0x30e/0x3e0
[177319.197701]  ? __pfx_default_wake_function+0x10/0x10
[177319.197704]  __lookup_slow+0x5c/0x130
[177319.197707]  walk_component+0x117/0x190
[177319.197710]  path_lookupat+0x6a/0x1b0
[177319.197713]  filename_lookup+0xe4/0x200
[177319.197718]  vfs_statx+0x95/0x1d0
[177319.197721]  vfs_fstatat+0xaa/0xe0
[177319.197723]  __do_sys_newfstatat+0x44/0x90
[177319.197727]  __x64_sys_newfstatat+0x1c/0x30
[177319.197730]  x64_sys_call+0x2505/0x25a0
[177319.197731]  do_syscall_64+0x7f/0x180
[177319.197734]  ? update_load_avg+0x82/0x850
[177319.197737]  ? update_load_avg+0x82/0x850
[177319.197739]  ? set_next_entity+0xd7/0x1a0
[177319.197741]  ? pick_next_task_fair+0x367/0x620
[177319.197744]  ? os_xsave+0x2e/0x70
[177319.197748]  ? rseq_get_rseq_cs+0x22/0x280
[177319.197751]  ? rseq_ip_fixup+0x90/0x1f0
[177319.197753]  ? restore_fpregs_from_fpstate+0x3d/0xd0
[177319.197756]  ? switch_fpu_return+0x55/0xf0
[177319.197757]  ? arch_exit_to_user_mode_prepare.isra.0+0x95/0xe0
[177319.197759]  ? irqentry_exit_to_user_mode+0x38/0x1e0
[177319.197761]  ? irqentry_exit+0x43/0x50
[177319.197763]  entry_SYSCALL_64_after_hwframe+0x78/0x80
[177319.197765] RIP: 0033:0x407d2e
[177319.197768] RSP: 002b:000000c0003e4c80 EFLAGS: 00000216 ORIG_RAX: 0000000000000106
[177319.197770] RAX: ffffffffffffffda RBX: ffffffffffffff9c RCX: 0000000000407d2e
[177319.197771] RDX: 000000c0005dec68 RSI: 000000c0000ca240 RDI: ffffffffffffff9c
[177319.197772] RBP: 000000c0003e4cc0 R08: 0000000000000000 R09: 0000000000000000
[177319.197773] R10: 0000000000000000 R11: 0000000000000216 R12: 000000c0000ca240
[177319.197774] R13: 0000000000000000 R14: 000000c0000a28c0 R15: 07ffffffffffffff
[177319.197777]  </TASK>
[230724.197402] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230777.595637] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230777.595764] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230784.210701] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230784.210936] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578002] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578916] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578998] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.538405] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.541827] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.542235] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230806.658285] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230806.658417] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230864.578949] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230864.579676] VFS: Lookup of 'diff' in fuse fuse would have caused loop

sorry I have limited understanding around these - but is it a right thing to do i.e binding between two FUSE (FUSE RAFS & FUSE store) mounts?

mount info -

nydusstore on /home/machine/git_projects/nydus-storage-plugin/temp/store type fuse.rawBridge (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other,max_read=131072)

rafs on /home/machine/git_projects/nydus-storage-plugin/temp/snapshots/bG9jYWxob3N0OjUwMDAvaGVsbG8td29ybGQ6bnlkdXMtMi4zLjk=/mnt type fuse (ro,nosuid,nodev,noatime,user_id=1000,group_id=1000,default_permissions,allow_other,max_read=1052672)

i will dig the error

@nibble0x2
Copy link

was trying to run these changes locally with podman 4.9 and nydus 2.3.9 -
seems there is Loop between store/snapshotID/layerDigest/diff and rafs/snapshotId/mnt as stat command on /diff throw error Too many levels of symbolic links.
logs from sudo dmesg -w -

[177319.197683] INFO: task nydus-store:346306 blocked for more than 368 seconds.
[177319.197684]       Tainted: G           OE      6.8.0-88-generic #89-Ubuntu
[177319.197686] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[177319.197687] task:nydus-store    state:D stack:0     pid:346306 tgid:345647 ppid:291011 flags:0x00000002
[177319.197689] Call Trace:
[177319.197690]  <TASK>
[177319.197691]  __schedule+0x27c/0x6b0
[177319.197695]  schedule+0x33/0x110
[177319.197698]  d_alloc_parallel+0x30e/0x3e0
[177319.197701]  ? __pfx_default_wake_function+0x10/0x10
[177319.197704]  __lookup_slow+0x5c/0x130
[177319.197707]  walk_component+0x117/0x190
[177319.197710]  path_lookupat+0x6a/0x1b0
[177319.197713]  filename_lookup+0xe4/0x200
[177319.197718]  vfs_statx+0x95/0x1d0
[177319.197721]  vfs_fstatat+0xaa/0xe0
[177319.197723]  __do_sys_newfstatat+0x44/0x90
[177319.197727]  __x64_sys_newfstatat+0x1c/0x30
[177319.197730]  x64_sys_call+0x2505/0x25a0
[177319.197731]  do_syscall_64+0x7f/0x180
[177319.197734]  ? update_load_avg+0x82/0x850
[177319.197737]  ? update_load_avg+0x82/0x850
[177319.197739]  ? set_next_entity+0xd7/0x1a0
[177319.197741]  ? pick_next_task_fair+0x367/0x620
[177319.197744]  ? os_xsave+0x2e/0x70
[177319.197748]  ? rseq_get_rseq_cs+0x22/0x280
[177319.197751]  ? rseq_ip_fixup+0x90/0x1f0
[177319.197753]  ? restore_fpregs_from_fpstate+0x3d/0xd0
[177319.197756]  ? switch_fpu_return+0x55/0xf0
[177319.197757]  ? arch_exit_to_user_mode_prepare.isra.0+0x95/0xe0
[177319.197759]  ? irqentry_exit_to_user_mode+0x38/0x1e0
[177319.197761]  ? irqentry_exit+0x43/0x50
[177319.197763]  entry_SYSCALL_64_after_hwframe+0x78/0x80
[177319.197765] RIP: 0033:0x407d2e
[177319.197768] RSP: 002b:000000c0003e4c80 EFLAGS: 00000216 ORIG_RAX: 0000000000000106
[177319.197770] RAX: ffffffffffffffda RBX: ffffffffffffff9c RCX: 0000000000407d2e
[177319.197771] RDX: 000000c0005dec68 RSI: 000000c0000ca240 RDI: ffffffffffffff9c
[177319.197772] RBP: 000000c0003e4cc0 R08: 0000000000000000 R09: 0000000000000000
[177319.197773] R10: 0000000000000000 R11: 0000000000000216 R12: 000000c0000ca240
[177319.197774] R13: 0000000000000000 R14: 000000c0000a28c0 R15: 07ffffffffffffff
[177319.197777]  </TASK>
[230724.197402] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230777.595637] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230777.595764] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230784.210701] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230784.210936] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578002] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578916] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230797.578998] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.538405] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.541827] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230801.542235] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230806.658285] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230806.658417] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230864.578949] VFS: Lookup of 'diff' in fuse fuse would have caused loop
[230864.579676] VFS: Lookup of 'diff' in fuse fuse would have caused loop

sorry I have limited understanding around these - but is it a right thing to do i.e binding between two FUSE (FUSE RAFS & FUSE store) mounts?
mount info -

nydusstore on /home/machine/git_projects/nydus-storage-plugin/temp/store type fuse.rawBridge (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000,allow_other,max_read=131072)

rafs on /home/machine/git_projects/nydus-storage-plugin/temp/snapshots/bG9jYWxob3N0OjUwMDAvaGVsbG8td29ybGQ6bnlkdXMtMi4zLjk=/mnt type fuse (ro,nosuid,nodev,noatime,user_id=1000,group_id=1000,default_permissions,allow_other,max_read=1052672)

i will dig the error

Thanks! let me know if you are not able to reproduce it...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants