···6262 | Some { result; data } -> result, data;;
6363```
64646565+<!-- $MDX non-deterministic=output -->
6566```ocaml
6667# let result, data = wait_with_retry uring;;
6768val result : int = 8
···105105 let v ~open_flags ~perm ~resolve path = make open_flags perm resolve path
106106end
107107108108+module Op = Config.Op
109109+108110(* The C stubs rely on the layout of Cstruct.t, so we just check here that it hasn't changed. *)
109111module Check_cstruct : sig
110112 [@@@warning "-34"]
···208210209211type clock = Boottime | Realtime
210212213213+type probe
214214+211215module Uring = struct
212216 type t
213217···218222 external register_bigarray : t -> Cstruct.buffer -> unit = "ocaml_uring_register_ba"
219223 external submit : t -> int = "ocaml_uring_submit" [@@noalloc]
220224 external sq_ready : t -> int = "ocaml_uring_sq_ready" [@@noalloc]
225225+226226+ external get_probe_ring : t -> probe = "ocaml_uring_get_probe_ring"
227227+ external opcode_supported : probe -> Op.t -> bool = "ocaml_uring_opcode_supported" [@@noalloc]
221228222229 type id = Heap.ptr
223230···496503497504let error_of_errno e =
498505 Uring.error_of_errno (abs e)
506506+507507+let get_probe t =
508508+ Uring.get_probe_ring t.uring
509509+510510+let op_supported probe op =
511511+ Uring.opcode_supported probe op
499512500513module Stats = struct
501514 type t = {
+12-1
lib/uring/uring.mli
···265265(** [recv_msg t fd msghdr d] will submit a [recvmsg(2)] request. If the request is
266266 successful then the [msghdr] will contain the sender address and the data received. *)
267267268268+(** {2 Probing}
269269+270270+ You can check which operations are supported by the running kernel. *)
271271+272272+module Op = Config.Op
273273+274274+type probe
275275+276276+val get_probe : _ t -> probe
277277+val op_supported : probe -> Op.t -> bool
278278+268279(** {2 Submitting operations} *)
269280270281val submit : 'a t -> int
···302313module Stats : sig
303314 type t = {
304315 sqe_ready : int; (** SQEs not yet submitted. *)
305305- active_ops : int; (** See {!active_ops}. *)
316316+ active_ops : int; (** See {!Uring.active_ops}. *)
306317 sketch_buffer_size : int; (** Size of the current sketch buffer. *)
307318 sketch_used : int; (** Bytes used within current sketch buffer. *)
308319 sketch_old_buffers : int; (** Old sketch buffers waiting to be freed. *)