diff options
| author | Jakob Unterwurzacher | 2020-10-14 00:35:16 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2020-10-14 00:35:16 +0200 | 
| commit | af4c1fb7a3f428ff704af22294ad955d05ed41dd (patch) | |
| tree | 66bdf7480ff1dd82bf2653c2070871762f24d742 /internal/fusefrontend | |
| parent | 803fdf410bb57d34ef09357ec4924646978c20b5 (diff) | |
syscallcompat: retry ops on EINTR
Retry operations that have been shown to throw EINTR
errors on CIFS.
Todo: Solution for this pain in the back:
	warning: unix.Getdents returned errno 2 in the middle of data
	rm: cannot remove 'linux-3.0.old3/Documentation/ABI/removed': Input/output error
Progress towards fixing https://github.com/rfjakob/gocryptfs/issues/483 .
Diffstat (limited to 'internal/fusefrontend')
| -rw-r--r-- | internal/fusefrontend/file.go | 2 | ||||
| -rw-r--r-- | internal/fusefrontend/node_dir_ops.go | 2 | ||||
| -rw-r--r-- | internal/fusefrontend/root_node.go | 4 | 
3 files changed, 5 insertions, 3 deletions
| diff --git a/internal/fusefrontend/file.go b/internal/fusefrontend/file.go index 66b3e24..0367705 100644 --- a/internal/fusefrontend/file.go +++ b/internal/fusefrontend/file.go @@ -409,7 +409,7 @@ func (f *File) Flush(ctx context.Context) syscall.Errno {  	if err != nil {  		return fs.ToErrno(err)  	} -	err = syscall.Close(newFd) +	err = syscallcompat.Close(newFd)  	return fs.ToErrno(err)  } diff --git a/internal/fusefrontend/node_dir_ops.go b/internal/fusefrontend/node_dir_ops.go index a93271d..b8d4ec7 100644 --- a/internal/fusefrontend/node_dir_ops.go +++ b/internal/fusefrontend/node_dir_ops.go @@ -306,7 +306,7 @@ retry:  		return fs.ToErrno(err)  	}  	if err != nil { -		tlog.Warn.Printf("Rmdir: Readdirnames: %v", err) +		tlog.Warn.Printf("Rmdir: Getdents: %v", err)  		return fs.ToErrno(err)  	}  	// MacOS sprinkles .DS_Store files everywhere. This is hard to avoid for diff --git a/internal/fusefrontend/root_node.go b/internal/fusefrontend/root_node.go index 5870c97..e03e250 100644 --- a/internal/fusefrontend/root_node.go +++ b/internal/fusefrontend/root_node.go @@ -203,6 +203,8 @@ func (rn *RootNode) openWriteOnlyFile(dirfd int, cName string, newFlags int) (rw  //  // openBackingDir is secure against symlink races by using Openat and  // ReadDirIVAt. +// +// Retries on EINTR.  func (rn *RootNode) openBackingDir(relPath string) (dirfd int, cName string, err error) {  	dirRelPath := nametransform.Dir(relPath)  	// With PlaintextNames, we don't need to read DirIVs. Easy. @@ -216,7 +218,7 @@ func (rn *RootNode) openBackingDir(relPath string) (dirfd int, cName string, err  		return dirfd, cName, nil  	}  	// Open cipherdir (following symlinks) -	dirfd, err = syscall.Open(rn.args.Cipherdir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0) +	dirfd, err = syscallcompat.Open(rn.args.Cipherdir, syscall.O_DIRECTORY|syscallcompat.O_PATH, 0)  	if err != nil {  		return -1, "", err  	} | 
