# HG changeset patch # User David Scott # Date 1282565815 -3600 # Node ID 2b18e28b785b150c42ff1ffe52eaae906365bc42 # Parent 59d698275079a28b784df5651337ca7716746b67 CA-43021: Fix bug detecting the backing vhd file caused by reading the wrong device's minor number. Signed-off-by: David Scott diff -r 59d698275079 -r 2b18e28b785b ocaml/xapi/sparse_dd.ml --- a/ocaml/xapi/sparse_dd.ml Mon Aug 23 13:16:53 2010 +0100 +++ b/ocaml/xapi/sparse_dd.ml Mon Aug 23 13:16:55 2010 +0100 @@ -353,18 +353,23 @@ match Tapctl.of_device (Tapctl.create ()) path with | _, _, (Some (_, vhd)) -> Some vhd | _, _, _ -> raise Not_found - with Not_found -> None in - match tapdisk_of_path path with - | Some vhd -> Some vhd - | None -> - begin match find_underlying_tapdisk path with - | Some path -> - begin match tapdisk_of_path path with - | Some vhd -> Some vhd - | None -> None - end + with Tapctl.Not_blktap -> + Printf.printf "Device %s is not controlled by blktap\n" path; + None + | Tapctl.Not_a_device -> + Printf.printf "%s is not a device\n" path; + None + | _ -> + Printf.printf "Device %s has an unknown driver\n" path; + None in + begin match find_underlying_tapdisk path with + | Some path -> + begin match tapdisk_of_path path with + | Some vhd -> Some vhd | None -> None end + | None -> None + end let deref_symlinks path = let rec inner seen_already path = @@ -472,6 +477,7 @@ end; let empty = Bat.of_list [] in + Printf.printf "src = %s; dest = %s; base = %s; size = %Ld\n" (Opt.default "None" !src) (Opt.default "None" !dest) (Opt.default "None" !base) !size; let size = Some !size in (** [chain_of_device device] returns [None] if [device] is None. @@ -484,7 +490,7 @@ let vhd : string option = flatten (Opt.map vhd_of_device device) in let chain : string list option = Opt.map chain_of_vhd vhd in let option y = Opt.default "None" (Opt.map (fun x -> "Some " ^ x) y) in - Printf.printf "%s has chain: [ %s ]" (option device) (option (Opt.map (String.concat "; ") chain)); + Printf.printf "%s has chain: [ %s ]\n" (option device) (option (Opt.map (String.concat "; ") chain)); chain in let bat : Bat.t option =