Is your feature request related to a problem?
Curvine FUSE advertises exportfs file-handle support, so name_to_handle_at followed by open_by_handle_at should reopen an existing file after kernel cache eviction. After sync and drop_caches, the same handle returns ESTALE even though the file still exists.
The saved file handle opens successfully before cache eviction, but after sync and drop_caches the same handle returns ESTALE (errno 116) for an existing file.
Reproduction:
- Mount curvine-fuse with exportfs support enabled.
- Create a file, call name_to_handle_at, confirm open_by_handle_at works.
- sync; echo 3 > /proc/sys/vm/drop_caches; retry open_by_handle_at on the same handle.
- Observe ESTALE while the file path still exists.
Impact
NFS-style or backup tooling that relies on exportfs handles cannot reliably reopen files on Curvine FUSE after inode cache pressure or drop_caches.
Describe the solution you'd like
open_by_handle_at reopens the existing file after kernel cache eviction. ESTALE is reserved for handles that no longer refer to an existing object.
Restore durable exportfs handle resolution across inode cache eviction in curvine-fuse so name_to_handle_at/open_by_handle_at reopen existing files after drop_caches; align errno with Linux for truly stale handles.
Additional context
Cleanup passed for the fuse profile. Closed issue #1302 described the same ESTALE-after-eviction symptom; open issue #933 tracks incomplete exportfs support. Root-cause statement is a hypothesis grounded in the failing round-trip.
Root-cause hypothesis: Root-cause hypothesis: after kernel cache eviction (drop_caches / FUSE_FORGET), curvine-fuse cannot resolve a previously encoded exportfs file handle for an still-existing file and returns ESTALE from open_by_handle_at.
Evidence summary: file_handle_at_test drop_caches round-trip fails with OSError errno=116 (ESTALE) while the basic round-trip before eviction passes. Fuse suite return code is 1 with cleanup passed.
Related issues: #1039
Acceptance / test gaps:
- file_handle_at drop_caches round-trip passes on curvine-fuse
- Existing files reopen via open_by_handle_at after drop_caches without ESTALE
Is your feature request related to a problem?
Curvine FUSE advertises exportfs file-handle support, so name_to_handle_at followed by open_by_handle_at should reopen an existing file after kernel cache eviction. After sync and drop_caches, the same handle returns ESTALE even though the file still exists.
The saved file handle opens successfully before cache eviction, but after sync and drop_caches the same handle returns ESTALE (errno 116) for an existing file.
Reproduction:
Impact
NFS-style or backup tooling that relies on exportfs handles cannot reliably reopen files on Curvine FUSE after inode cache pressure or drop_caches.
Describe the solution you'd like
open_by_handle_at reopens the existing file after kernel cache eviction. ESTALE is reserved for handles that no longer refer to an existing object.
Restore durable exportfs handle resolution across inode cache eviction in curvine-fuse so name_to_handle_at/open_by_handle_at reopen existing files after drop_caches; align errno with Linux for truly stale handles.
Additional context
Cleanup passed for the fuse profile. Closed issue #1302 described the same ESTALE-after-eviction symptom; open issue #933 tracks incomplete exportfs support. Root-cause statement is a hypothesis grounded in the failing round-trip.
Root-cause hypothesis: Root-cause hypothesis: after kernel cache eviction (drop_caches / FUSE_FORGET), curvine-fuse cannot resolve a previously encoded exportfs file handle for an still-existing file and returns ESTALE from open_by_handle_at.
Evidence summary: file_handle_at_test drop_caches round-trip fails with OSError errno=116 (ESTALE) while the basic round-trip before eviction passes. Fuse suite return code is 1 with cleanup passed.
Related issues: #1039
Acceptance / test gaps: