diff options
Diffstat (limited to 'contrib/getdents-debug/readdirnames')
| -rw-r--r-- | contrib/getdents-debug/readdirnames/.gitignore | 1 | ||||
| -rw-r--r-- | contrib/getdents-debug/readdirnames/readdirnames.go | 56 | 
2 files changed, 57 insertions, 0 deletions
| diff --git a/contrib/getdents-debug/readdirnames/.gitignore b/contrib/getdents-debug/readdirnames/.gitignore new file mode 100644 index 0000000..228dbb3 --- /dev/null +++ b/contrib/getdents-debug/readdirnames/.gitignore @@ -0,0 +1 @@ +/readdirnames diff --git a/contrib/getdents-debug/readdirnames/readdirnames.go b/contrib/getdents-debug/readdirnames/readdirnames.go new file mode 100644 index 0000000..dc33512 --- /dev/null +++ b/contrib/getdents-debug/readdirnames/readdirnames.go @@ -0,0 +1,56 @@ +/* +Small tool to try to debug unix.Getdents problems on CIFS mounts +( https://github.com/rfjakob/gocryptfs/issues/483 ) + +Example output: + +$ while sleep 1 ; do ./readdirnames /mnt/synology/public/tmp/g1 ; done +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=868, err=readdirent: no such file or directory +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +2020/05/24 23:50:39 os.Open returned err=open /mnt/synology/public/tmp/g1: interrupted system call +Readdirnames: len=1001, err=<nil> +Readdirnames: len=1001, err=<nil> +*/ + +package main + +import ( +	"flag" +	"fmt" +	"log" +	"os" +) + +const ( +	myName = "readdirnames" +) + +func main() { +	flag.Usage = func() { +		fmt.Fprintf(os.Stderr, "Usage: %s PATH\n", myName) +		fmt.Fprintf(os.Stderr, "Run os.File.Readdirnames on PATH\n") +		os.Exit(1) +	} +	flag.Parse() +	if flag.NArg() != 1 { +		flag.Usage() +	} +	path := flag.Arg(0) + +	f, err := os.Open(path) +	if err != nil { +		log.Fatalf("os.Open returned err=%v", err) +	} + +	names, err := f.Readdirnames(0) +	fmt.Printf("Readdirnames: len=%d, err=%v\n", len(names), err) +} | 
