X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=lib%2Fdiskimage_lvm2.ml;h=2c2fa608a23cc5b7c07b32f6fa686b60515dea29;hb=7a5fc851494dacaae801ef578c2b68d6184543f4;hp=632e879f8c22ecfed51f8a96887eb7af55c4cb3c;hpb=8ecbebaf01f96a781ded3e24235697c62bc515b4;p=virt-df.git diff --git a/lib/diskimage_lvm2.ml b/lib/diskimage_lvm2.ml index 632e879..2c2fa60 100644 --- a/lib/diskimage_lvm2.ml +++ b/lib/diskimage_lvm2.ml @@ -23,12 +23,12 @@ open Printf open ExtList -open Diskimage_utils +open Diskimage_impl open Diskimage_lvm2_metadata open Int63.Operators -let plugin_id = "LVM2" +let id = "LVM2" let sector_size_int = 512 let sector_size = ~^sector_size_int @@ -102,12 +102,12 @@ end (*----------------------------------------------------------------------*) (* Probe to see if it's an LVM2 PV. *) -let rec probe lvm_plugin_id dev = +let rec probe dev = try let uuid, _ = read_pv_label dev in if !debug then eprintf "LVM2 detected PV UUID %s\n%!" uuid; - { lvm_plugin_id = lvm_plugin_id; pv_uuid = uuid; pv_dev = dev } + { pv_cb = callbacks; pv_uuid = uuid; pv_dev = dev } with exn -> if !debug then prerr_endline (Printexc.to_string exn); raise Not_found @@ -181,15 +181,17 @@ and read_metadata dev offset len = * (as devices) and return them. Note that we don't try to detect * what is on these LVs - that will be done in the main code. *) -let rec list_lvs devs = +and list_lvs pvs = (* Read the UUID and metadata (again) from each device to end up with * an assoc list of PVs, keyed on the UUID. + * + * XXX We've already read this - we should save it in the pv struct. *) let pvs = List.map ( - fun dev -> + fun { pv_dev = dev } -> let uuid, metadata = read_pv_label dev in (uuid, (metadata, dev)) - ) devs in + ) pvs in (* Parse the metadata using the external lexer/parser. *) let pvs = List.map ( @@ -452,10 +454,13 @@ let rec list_lvs devs = * structure to determine quickly which blocks are used. Need * to store the parsed metadata in the structure ... *) -let offset_is_free _ _ = false +and offset_is_free _ _ = false -let callbacks = { - lvm_cb_probe = probe; +and callbacks = { + lvm_cb_name = id; lvm_cb_list_lvs = list_lvs; lvm_cb_offset_is_free = offset_is_free; } + +(* Register the plugin. *) +let () = register_plugin ~lvm:probe id