juicedata/juicefs · error
read %s: %w
Error message
read %s: %w
What it means
Returned by loadConfig while walking up from a path looking for the JuiceFS .config file: a directory entry named like the config exists but reading it fails with a non-ENOENT error (permission denied, I/O error). The wrapped error identifies the failing directory.
Source
Thrown at cmd/mount_unix.go:165
return
}
logger.Warnf("watchdog: FUSE abort triggered for connection %d, pid %d", conn, pid)
} else if err != nil {
logger.Warnf("watchdog: failed to parse waiting FUSE requests for connection %d, pid %d: %v; abort not triggered", conn, pid, err)
}
}
}
func loadConfig(path string) (string, *vfs.Config, error) {
for d := path; d != "/"; d = filepath.Dir(d) {
data, err := readConfig(d)
if err == nil {
var conf vfs.Config
err = json.Unmarshal(data, &conf)
return d, &conf, err
}
if !os.IsNotExist(err) {
return "", nil, fmt.Errorf("read %s: %w", d, err)
}
}
return "", nil, fmt.Errorf("%s is not inside JuiceFS", path)
}
func printThreadsStack(pid int) {
if pid <= 1 {
return
}
start := time.Now()
tids, err := os.ReadDir(fmt.Sprintf("/proc/%d/task", pid))
if err != nil {
logger.Warnf("list tasks of pid %d: %s", pid, err)
return
}
var b strings.Builder
for _, tid := range tids {
readThreadStats(pid, tid.Name(), &b)View on GitHub (pinned to c9a67b23e8)
Solutions
- Fix read permissions / I/O issues on the reported path so the .config can be read
- Remove the corrupt .config file so the mount recreates it
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at cmd/mount_unix.go:165 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/a2332b517020ae00.
Report an issue: GitHub.