diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2008-04-15 11:26:46 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2008-04-15 11:26:46 +0100 |
commit | 0019c13c600d34f12778e849246711bb20ba4ee2 (patch) | |
tree | 57e2dc48b526ae4445bd5f542cce4ab04a7b735e /virt-df/virt_df_lvm2.ml | |
parent | 748302caa93af2c412bcd30dad5787a5a24e9af5 (diff) | |
download | virt-top-0019c13c600d34f12778e849246711bb20ba4ee2.tar.gz virt-top-0019c13c600d34f12778e849246711bb20ba4ee2.tar.xz virt-top-0019c13c600d34f12778e849246711bb20ba4ee2.zip |
Don't need the ': device' typecasts any more.
Diffstat (limited to 'virt-df/virt_df_lvm2.ml')
-rw-r--r-- | virt-df/virt_df_lvm2.ml | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/virt-df/virt_df_lvm2.ml b/virt-df/virt_df_lvm2.ml index a79ec7f..4247dc3 100644 --- a/virt-df/virt_df_lvm2.ml +++ b/virt-df/virt_df_lvm2.ml @@ -24,9 +24,33 @@ open Printf open Virt_df_gettext.Gettext open Virt_df -let probe_lvm2 (dev : device) = - raise Not_found +let sector_size = 512 +let sector_size64 = 512L + +let pv_label_offset = sector_size64 + +let rec probe_pv dev = + try ignore (read_pv_label dev); true + with _ -> false + +and read_pv_label dev = + (* Load the second sector. *) + let bits = dev#read_bitstring pv_label_offset sector_size in + + bitmatch bits with + | labelone : 8*8 : bitstring; (* "LABELONE" *) + padding : 16*8 : bitstring; + lvm2_ver : 8*8 : bitstring; (* "LVM2 001" *) + uuid : 32*8 : bitstring (* UUID *) + when Bitmatch.string_of_bitstring labelone = "LABELONE" && + Bitmatch.string_of_bitstring lvm2_ver = "LVM2 001" -> + uuid + | _ -> + invalid_arg (sprintf "read_pv_label: %s: not an LVM2 physical volume" + dev#name) + +let list_lvs devs = [] (* Register with main code. *) let () = - filesystem_type_register "LVM2" probe_lvm2 + lvm_type_register "LVM2" probe_pv list_lvs |