-let lvm_type_register (lvm_name : string) probe_fn =
- lvm_types := (lvm_name, probe_fn) :: !lvm_types
-*)
+let lvm_type_register (lvm_name : string) probe_fn list_lvs_fn =
+ lvm_types := (lvm_name, (probe_fn, list_lvs_fn)) :: !lvm_types
+
+(* Probe a device for a PV. Returns [Some lvm_name] or [None]. *)
+let probe_for_pv dev =
+ if debug then eprintf "probing if %s is a PV ...\n%!" dev#name;
+ let rec loop = function
+ | [] -> None
+ | (lvm_name, (probe_fn, _)) :: rest ->
+ if probe_fn dev then Some lvm_name else loop rest
+ in
+ let r = loop !lvm_types in
+ if debug then (
+ match r with
+ | None -> eprintf "no PV found on %s\n%!" dev#name
+ | Some lvm_name ->
+ eprintf "%s contains a %s PV\n%!" dev#name lvm_name
+ );
+ r