git.annexia.org
/
virt-df.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added #contiguous method to make block mapping more efficient, and
[virt-df.git]
/
lib
/
diskimage_utils.ml
diff --git
a/lib/diskimage_utils.ml
b/lib/diskimage_utils.ml
index
4ad508d
..
80a7e3a
100644
(file)
--- a/
lib/diskimage_utils.ml
+++ b/
lib/diskimage_utils.ml
@@
-29,7
+29,8
@@
object (self)
method virtual size : int63
method virtual name : string
method virtual blocksize : int63
method virtual size : int63
method virtual name : string
method virtual blocksize : int63
- method virtual mapblock : int63 -> (device * int63) list
+ method virtual map_block : int63 -> (device * int63) list
+ method virtual contiguous : Int63.t -> Int63.t
(* Block-based read. Inefficient so normally overridden in subclasses. *)
method read offset len =
(* Block-based read. Inefficient so normally overridden in subclasses. *)
method read offset len =
@@
-51,7
+52,7
@@
object (self)
let not_mapped_error () = invalid_arg "device: read: block not mapped" in
(* Copy the first block (partial). *)
let not_mapped_error () = invalid_arg "device: read: block not mapped" in
(* Copy the first block (partial). *)
- (match self#mapblock first_blk with
+ (match self#map
_
block first_blk with
| [] -> not_mapped_error ()
| (dev, base) :: _ ->
let len =
| [] -> not_mapped_error ()
| (dev, base) :: _ ->
let len =
@@
-63,7
+64,7
@@
object (self)
(* Copy the middle blocks. *)
let rec loop blk =
if blk < last_blk then (
(* Copy the middle blocks. *)
let rec loop blk =
if blk < last_blk then (
- (match self#mapblock blk with
+ (match self#map
_
block blk with
| [] -> not_mapped_error ()
| (dev, base) :: _ ->
let str = dev#read ~^0 self#blocksize in
| [] -> not_mapped_error ()
| (dev, base) :: _ ->
let str = dev#read ~^0 self#blocksize in
@@
-76,7
+77,7
@@
object (self)
(* Copy the last block (partial). *)
if first_blk < last_blk then (
(* Copy the last block (partial). *)
if first_blk < last_blk then (
- match self#mapblock last_blk with
+ match self#map
_
block last_blk with
| [] -> not_mapped_error ()
| (dev, base) :: _ ->
let len = (offset +^ len) -^ last_blk *^ blocksize in
| [] -> not_mapped_error ()
| (dev, base) :: _ ->
let len = (offset +^ len) -^ last_blk *^ blocksize in
@@
-109,7
+110,9
@@
object (self)
method size = size
method name = filename
method blocksize = blocksize
method size = size
method name = filename
method blocksize = blocksize
- method mapblock _ = []
+ method map_block _ = []
+ method contiguous offset =
+ size -^ offset
method close () = close fd
end
method close () = close fd
end
@@
-128,7
+131,9
@@
object
);
dev#read (start+^offset) len
method blocksize = blocksize
);
dev#read (start+^offset) len
method blocksize = blocksize
- method mapblock i = [dev, i *^ blocksize +^ start]
+ method map_block i = [dev, i *^ blocksize +^ start]
+ method contiguous offset =
+ size -^ offset
end
(* A device with just a modified block size. *)
end
(* A device with just a modified block size. *)
@@
-137,11
+142,12
@@
object
inherit device
method name = dev#name
method size = dev#size
inherit device
method name = dev#name
method size = dev#size
- method read
offset len = dev#read offset len
+ method read
= dev#read
method blocksize = new_blocksize
method blocksize = new_blocksize
- method mapblock new_blk =
+ method map
_
block new_blk =
let orig_blk = new_blk *^ new_blocksize /^ dev#blocksize in
let orig_blk = new_blk *^ new_blocksize /^ dev#blocksize in
- dev#mapblock orig_blk
+ dev#map_block orig_blk
+ method contiguous offset = dev#size -^ offset
end
(* The null device. Any attempt to read generates an error. *)
end
(* The null device. Any attempt to read generates an error. *)
@@
-152,7
+158,8
@@
object
method size = ~^0
method name = "null"
method blocksize = ~^1
method size = ~^0
method name = "null"
method blocksize = ~^1
- method mapblock _ = assert false
+ method map_block _ = assert false
+ method contiguous _ = ~^0
end
type machine = {
end
type machine = {