diff options
| author | Jakob Unterwurzacher | 2016-11-17 20:32:19 +0100 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2016-11-17 20:32:19 +0100 | 
| commit | e04dc050126edcf7440ea5412bc74c6ad8b42e95 (patch) | |
| tree | 56affe516cc83618152790582d0a8a6b2c870646 /internal/fusefrontend_reverse | |
| parent | 081015aa746cc2a37284ad545d56d5ceb78164b6 (diff) | |
fusefrontend: upgrade wlockMap to use device AND inode number
If there are multiple filesystems backing the gocryptfs filesystems
inode numbers are not guaranteed to be unique.
Diffstat (limited to 'internal/fusefrontend_reverse')
| -rw-r--r-- | internal/fusefrontend_reverse/ino_map.go | 5 | ||||
| -rw-r--r-- | internal/fusefrontend_reverse/rfs.go | 6 | 
2 files changed, 3 insertions, 8 deletions
| diff --git a/internal/fusefrontend_reverse/ino_map.go b/internal/fusefrontend_reverse/ino_map.go index 9412343..dae8222 100644 --- a/internal/fusefrontend_reverse/ino_map.go +++ b/internal/fusefrontend_reverse/ino_map.go @@ -17,8 +17,3 @@ type inoGenT struct {  func (i *inoGenT) next() uint64 {  	return atomic.AddUint64(i.ino, 1)  } - -type devIno struct { -	dev uint64 -	ino uint64 -} diff --git a/internal/fusefrontend_reverse/rfs.go b/internal/fusefrontend_reverse/rfs.go index 7f102cf..aca4b90 100644 --- a/internal/fusefrontend_reverse/rfs.go +++ b/internal/fusefrontend_reverse/rfs.go @@ -41,7 +41,7 @@ type ReverseFS struct {  	// Inode number generator  	inoGen *inoGenT  	// Maps backing files device+inode pairs to user-facing unique inode numbers -	inoMap map[devIno]uint64 +	inoMap map[fusefrontend.DevInoStruct]uint64  	// Protects map access  	inoMapLock sync.Mutex  } @@ -68,7 +68,7 @@ func NewFS(args fusefrontend.Args) *ReverseFS {  		nameTransform: nameTransform,  		contentEnc:    contentEnc,  		inoGen:        newInoGen(), -		inoMap:        map[devIno]uint64{}, +		inoMap:        map[fusefrontend.DevInoStruct]uint64{},  	}  } @@ -167,7 +167,7 @@ func (rfs *ReverseFS) inoAwareStat(relPlainPath string) (*fuse.Attr, fuse.Status  	// The file has hard links. We have to give it a stable inode number so  	// tar or rsync can find them.  	if fi.Mode().IsRegular() && st.Nlink > 1 { -		di := devIno{uint64(st.Dev), st.Ino} +		di := fusefrontend.DevInoFromStat(st)  		rfs.inoMapLock.Lock()  		stableIno := rfs.inoMap[di]  		if stableIno == 0 { | 
