Generate uniquifier so that private data functions will work.
[virt-df.git] / lib / diskimage_linux_swsuspend.ml
index 5f29286..93da753 100644 (file)
    Support for Linux software suspend partitions.
 *)
 
-open Diskimage_utils
+open Diskimage_impl
 
 open Int63.Operators
 
-let plugin_id = "linux_swsuspend"
+let id = "linux_swsuspend"
 let blocksize = ~^4096                 (* XXX *)
 
-let probe dev =
+let rec probe dev =
   (* Load the "superblock" (ie. first 0x1000 bytes). *)
   let bits = dev#read_bitstring ~^0 ~^0x1000 in
 
@@ -40,7 +40,7 @@ let probe dev =
 
       let fs_dev = new blocksize_overlay blocksize dev in
       {
-       fs_plugin_id = plugin_id;
+       fs_cb = callbacks ();
        fs_dev = fs_dev;
 
        fs_blocksize = blocksize;
@@ -59,3 +59,20 @@ let probe dev =
 
   | { _ } ->
       raise Not_found                  (* Not Linux software suspend. *)
+
+(* Linux software suspend image is never free.
+ * Compare diskimage_linux_swap.ml
+ *)
+and offset_is_free _ _ = false
+
+and callbacks =
+  let i = ref 0 in
+  fun () -> {
+    fs_cb_uq = (incr i; !i);
+    fs_cb_name = id;
+    fs_cb_printable_name = "Linux s/w suspend";
+    fs_cb_offset_is_free = offset_is_free;
+  }
+
+(* Register the plugin. *)
+let () = register_plugin ~filesystem:probe id