ocaml-multicore / eio

Effects-based direct-style IO for multicore OCaml
Other
548 stars 66 forks source link

Eio_posix succeeds, but Eio_linux fails with: (No such file or directory, "openat2", "") #559

Closed SGrondin closed 1 year ago

SGrondin commented 1 year ago

As the title says, I've run into a situation where Eio_posix works, but Eio_linux fails.

I'm using OCaml 5.0.0, eio_* 0.10 and the Linux environment is Alpine 3.18.

$ uname -a
Linux f2ae1fa96c11 5.15.49-linuxkit #1 SMP Tue Sep 13 07:51:46 UTC 2022 x86_64 GNU/Linux

This works and correctly lists the contents of the src directory:

let () =
  Eio_posix.run @@ fun env ->
  Eio.Path.(with_open_dir (env#cwd / "src") read_dir) |> List.iter print_endline

But this fails:

let () =
  Eio_linux.run @@ fun env ->
  Eio.Path.(with_open_dir (env#cwd / "src") read_dir) |> List.iter print_endline
Fatal error: exception Eio.Io Fs Not_found Unix_error (No such file or directory, "openat2", ""),
  reading directory <src:>
Raised at Eio_linux__Low_level.openat2.use in file "lib_eio_linux/low_level.ml", line 285, characters 6-66
Called from Eio_unix__Rcfd.use in file "lib_eio/unix/rcfd.ml", line 161, characters 10-14
Re-raised at Eio_unix__Rcfd.use in file "lib_eio/unix/rcfd.ml", line 166, characters 6-41
Called from Eio_linux__Low_level.open_dir in file "lib_eio_linux/low_level.ml" (inlined), line 410, characters 2-114
Called from Eio_linux.dir#read_dir.(fun) in file "lib_eio_linux/eio_linux.ml", line 416, characters 13-43
Called from Eio__core__Switch.run_internal in file "lib_eio/core/switch.ml", line 132, characters 8-12
Re-raised at Eio__core__Switch.maybe_raise_exs in file "lib_eio/core/switch.ml", line 116, characters 21-56
Called from Eio__core__Switch.run_internal in file "lib_eio/core/switch.ml", line 148, characters 4-21
Called from Eio__core__Cancel.with_cc in file "lib_eio/core/cancel.ml", line 116, characters 8-12
Re-raised at Eio__core__Cancel.with_cc in file "lib_eio/core/cancel.ml", line 118, characters 32-40
Called from Eio__Path.read_dir in file "lib_eio/path.ml", line 38, characters 31-48
Re-raised at Eio__core__Exn.reraise_with_context.(fun) in file "lib_eio/core/exn.ml", line 34, characters 4-57
Called from Eio__Path.with_open_dir.(fun) in file "lib_eio/path.ml" (inlined), line 50, characters 26-48
Called from Eio__core__Switch.run_internal in file "lib_eio/core/switch.ml" (inlined), line 132, characters 8-12
Called from Eio__core__Switch.run.(fun) in file "lib_eio/core/switch.ml" (inlined), line 151, characters 35-62
Called from Eio__core__Cancel.sub.(fun) in file "lib_eio/core/cancel.ml" (inlined), line 171, characters 2-6
Called from Eio__core__Switch.run.(fun) in file "lib_eio/core/switch.ml" (inlined), line 151, characters 35-62
Called from Eio__core__Cancel.sub.(fun) in file "lib_eio/core/cancel.ml", line 171, characters 2-6
Re-raised at Eio_linux__Sched.run in file "lib_eio_linux/sched.ml", line 485, characters 22-57
Called from Eio_linux.run_event_loop.(fun) in file "lib_eio_linux/eio_linux.ml" (inlined), line 511, characters 2-38
Called from Eio_linux__Sched.with_sched.(fun) in file "lib_eio_linux/sched.ml" (inlined), line 546, characters 8-96
Called from Eio_linux__Sched.with_eventfd in file "lib_eio_linux/sched.ml" (inlined), line 512, characters 8-18
Called from Eio_linux__Sched.with_sched in file "lib_eio_linux/sched.ml" (inlined), line 545, characters 8-135
Called from Eio_linux.run_event_loop in file "lib_eio_linux/eio_linux.ml" (inlined), line 462, characters 2-1023
Called from Eio_linux.run in file "lib_eio_linux/eio_linux.ml" (inlined), line 518, characters 2-45
Called from Dune__exe__Test in file "src/test/test.ml", line 2, characters 2-126

Thank you!