Generate uniquifier so that private data functions will work.
[virt-df.git] / lib / diskimage_lvm2.ml
index 2c2fa60..da61600 100644 (file)
@@ -107,7 +107,7 @@ let rec probe dev =
     let uuid, _ = read_pv_label dev in
     if !debug then
       eprintf "LVM2 detected PV UUID %s\n%!" uuid;
-    { pv_cb = callbacks; 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
@@ -423,7 +423,7 @@ and list_lvs pvs =
   (* Finally we can set up devices for the LVs. *)
   let lvs =
     List.map (
-      fun (vgname, (pvuuid, vgmeta, pvdevs, extent_size, lvs)) ->
+      fun (vgname, (pvuuids, vgmeta, pvdevs, extent_size, lvs)) ->
        try
          List.map (
            fun (lvname, segments) ->
@@ -456,11 +456,14 @@ and list_lvs pvs =
  *)
 and offset_is_free _ _ = false
 
-and callbacks = {
-  lvm_cb_name = id;
-  lvm_cb_list_lvs = list_lvs;
-  lvm_cb_offset_is_free = offset_is_free;
-}
+and callbacks =
+  let i = ref 0 in
+  fun () -> {
+    lvm_cb_uq = (incr i; !i);
+    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