aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/fusefrontend_reverse/virtualnode.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/fusefrontend_reverse/virtualnode.go b/internal/fusefrontend_reverse/virtualnode.go
index 688f536..922cfa7 100644
--- a/internal/fusefrontend_reverse/virtualnode.go
+++ b/internal/fusefrontend_reverse/virtualnode.go
@@ -86,8 +86,15 @@ func (n *Node) newVirtualMemNode(content []byte, parentStat *syscall.Stat_t, ino
// Adjust inode number and size
rn := n.rootNode()
st := parentStat
- q := inomap.NewQIno(uint64(st.Dev), inoTag, uint64(st.Ino))
- st.Ino = rn.inoMap.Translate(q)
+ if inoTag == inoTagNameFile {
+ // No stable mapping for gocryptfs.longname.*.name files, instead use an
+ // incrementing counter. We don't want two of those files to ever have the
+ // same inode number, even for hard-linked files.
+ st.Ino = rn.inoMap.NextSpillIno()
+ } else {
+ q := inomap.NewQIno(uint64(st.Dev), inoTag, uint64(st.Ino))
+ st.Ino = rn.inoMap.Translate(q)
+ }
st.Size = int64(len(content))
st.Mode = virtualFileMode
st.Nlink = 1