diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/fusefrontend/node_helpers.go | 3 | ||||
| -rw-r--r-- | internal/fusefrontend/root_node.go | 3 | ||||
| -rw-r--r-- | internal/fusefrontend_reverse/root_node.go | 4 | ||||
| -rw-r--r-- | internal/inomap/inomap.go | 11 | ||||
| -rw-r--r-- | internal/openfiletable/open_file_table.go | 6 | 
5 files changed, 14 insertions, 13 deletions
diff --git a/internal/fusefrontend/node_helpers.go b/internal/fusefrontend/node_helpers.go index f5dfeb6..2ad2466 100644 --- a/internal/fusefrontend/node_helpers.go +++ b/internal/fusefrontend/node_helpers.go @@ -2,7 +2,6 @@ package fusefrontend  import (  	"context" -	"sync/atomic"  	"syscall"  	"github.com/hanwen/go-fuse/v2/fs" @@ -91,7 +90,7 @@ func (n *Node) newChild(ctx context.Context, st *syscall.Stat_t, out *fuse.Entry  	if rn.args.SharedStorage || rn.quirks&syscallcompat.QuirkDuplicateIno1 != 0 {  		// Make each directory entry a unique node by using a unique generation  		// value - see the comment at RootNode.gen for details. -		gen = atomic.AddUint64(&rn.gen, 1) +		gen = rn.gen.Add(1)  	}  	// Create child node diff --git a/internal/fusefrontend/root_node.go b/internal/fusefrontend/root_node.go index ac814ad..d2950a1 100644 --- a/internal/fusefrontend/root_node.go +++ b/internal/fusefrontend/root_node.go @@ -4,6 +4,7 @@ import (  	"os"  	"strings"  	"sync" +	"sync/atomic"  	"syscall"  	"time" @@ -55,7 +56,7 @@ type RootNode struct {  	// This makes each directory entry unique (even hard links),  	// makes go-fuse hand out separate FUSE Node IDs for each, and prevents  	// bizarre problems when inode numbers are reused behind our back. -	gen uint64 +	gen atomic.Uint64  	// quirks is a bitmap that enables workaround for quirks in the filesystem  	// backing the cipherdir  	quirks uint64 diff --git a/internal/fusefrontend_reverse/root_node.go b/internal/fusefrontend_reverse/root_node.go index c0ef814..9c2de28 100644 --- a/internal/fusefrontend_reverse/root_node.go +++ b/internal/fusefrontend_reverse/root_node.go @@ -50,7 +50,7 @@ type RootNode struct {  	// makes go-fuse hand out separate FUSE Node IDs for each, and prevents  	// bizarre problems when inode numbers are reused behind our back,  	// like this one: https://github.com/rfjakob/gocryptfs/issues/802 -	gen uint64 +	gen atomic.Uint64  	// rootIno is the inode number that we report for the root node on mount  	rootIno uint64  } @@ -175,7 +175,7 @@ func (rn *RootNode) uniqueStableAttr(mode uint32, ino uint64) fs.StableAttr {  		Ino:  ino,  		// Make each directory entry a unique node by using a unique generation  		// value. Also see the comment at RootNode.gen for details. -		Gen: atomic.AddUint64(&rn.gen, 1), +		Gen: rn.gen.Add(1),  	}  } diff --git a/internal/inomap/inomap.go b/internal/inomap/inomap.go index b4dbf27..5749202 100644 --- a/internal/inomap/inomap.go +++ b/internal/inomap/inomap.go @@ -45,7 +45,7 @@ type InoMap struct {  	// spill is used once the namespaces map is full  	spillMap map[QIno]uint64  	// spillNext is the next free inode number in the spill map -	spillNext uint64 +	spillNext atomic.Uint64  }  // New returns a new InoMap. @@ -57,8 +57,9 @@ func New(rootDev uint64) *InoMap {  		namespaceMap:  make(map[namespaceData]uint16),  		namespaceNext: 0,  		spillMap:      make(map[QIno]uint64), -		spillNext:     spillSpaceStart,  	} +	m.spillNext.Store(spillSpaceStart) +  	if rootDev > 0 {  		// Reserve namespace 0 for rootDev  		m.namespaceMap[namespaceData{rootDev, 0}] = 0 @@ -74,10 +75,10 @@ var spillWarn sync.Once  // Reverse mode NextSpillIno() for gocryptfs.longname.*.name files where a stable  // mapping is not needed.  func (m *InoMap) NextSpillIno() (out uint64) { -	if m.spillNext == math.MaxUint64 { -		log.Panicf("spillMap overflow: spillNext = 0x%x", m.spillNext) +	if m.spillNext.Load() == math.MaxUint64 { +		log.Panicf("spillMap overflow: spillNext = 0x%x", m.spillNext.Load())  	} -	return atomic.AddUint64(&m.spillNext, 1) - 1 +	return m.spillNext.Add(1) - 1  }  func (m *InoMap) spill(in QIno) (out uint64) { diff --git a/internal/openfiletable/open_file_table.go b/internal/openfiletable/open_file_table.go index ce8df76..420d070 100644 --- a/internal/openfiletable/open_file_table.go +++ b/internal/openfiletable/open_file_table.go @@ -29,7 +29,7 @@ type table struct {  	// The variable is accessed without holding any locks so atomic operations  	// must be used. It must be the first element of the struct to guarantee  	// 64-bit alignment. -	writeOpCount uint64 +	writeOpCount atomic.Uint64  	// Protects map access  	sync.Mutex  	// Table entries @@ -85,13 +85,13 @@ type countingMutex struct {  func (c *countingMutex) Lock() {  	c.RWMutex.Lock() -	atomic.AddUint64(&t.writeOpCount, 1) +	t.writeOpCount.Add(1)  }  // WriteOpCount returns the write lock counter value. This value is incremented  // each time writeLock.Lock() on a file table entry is called.  func WriteOpCount() uint64 { -	return atomic.LoadUint64(&t.writeOpCount) +	return t.writeOpCount.Load()  }  // CountOpenFiles returns how many entries are currently in the table  | 
