diff options
author | Jakob Unterwurzacher | 2020-05-03 20:21:11 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2020-05-03 20:21:11 +0200 |
commit | 8c9c68fb724150654721bd665cc9233c641a0ea5 (patch) | |
tree | f4e032bf93d7f2e2014d6b03c9b51ebb9ca65ca7 /internal/inomap/inomap.go | |
parent | 91f5c242a8f4527f3266c09d7f18ff997593bafa (diff) |
inomap: fix spillBit not set on 2nd hit
Also add a test for this.
Thanks @slackner for the comment.
Diffstat (limited to 'internal/inomap/inomap.go')
-rw-r--r-- | internal/inomap/inomap.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/internal/inomap/inomap.go b/internal/inomap/inomap.go index d3177ae..fb6faf6 100644 --- a/internal/inomap/inomap.go +++ b/internal/inomap/inomap.go @@ -27,6 +27,8 @@ const ( maxPassthruIno = 1<<48 - 1 // max value of 63 bit spill inode number maxSpillIno = 1<<63 - 1 + // bit 63 is used as the spill bit + spillBit = 1 << 63 ) // InoMap stores the maps using for inode number translation. @@ -57,7 +59,7 @@ func New() *InoMap { func (m *InoMap) spill(in QIno) (out uint64) { out, found := m.spillMap[in] if found { - return out + return out | spillBit } if m.spillNext >= maxSpillIno { log.Panicf("spillMap overflow: spillNext = 0x%x", m.spillNext) @@ -65,7 +67,7 @@ func (m *InoMap) spill(in QIno) (out uint64) { out = m.spillNext m.spillNext++ m.spillMap[in] = out - return 1<<63 | out + return out | spillBit } // Translate maps the passed-in (device, inode) pair to a unique inode number. |