From 25f1727de9e5681a5ceefe1516a5a01fa4ca624a Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Sat, 23 May 2020 22:54:23 +0200 Subject: [PATCH] syscallcompat: getdents: retry on EINTR Fixes: https://github.com/rfjakob/gocryptfs/issues/483 Related: https://github.com/golang/go/issues/38836 --- internal/syscallcompat/getdents_linux.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/syscallcompat/getdents_linux.go b/internal/syscallcompat/getdents_linux.go index 2674cb3..6cfb033 100644 --- a/internal/syscallcompat/getdents_linux.go +++ b/internal/syscallcompat/getdents_linux.go @@ -35,7 +35,13 @@ func getdents(fd int) ([]fuse.DirEntry, error) { tmp := make([]byte, 10000) for { n, err := unix.Getdents(fd, tmp) - if err != nil { + // unix.Getdents has been observed to return EINTR on cifs mounts + if err == unix.EINTR { + if n > 0 { + smartBuf.Write(tmp[:n]) + } + continue + } else if err != nil { return nil, err } if n == 0 {