Library
Module
Module type
Parameter
Class
Class type
Parameters
module Primary : Mirage_block.S
module Secondary : Mirage_block.S
Signature
include Mirage_block.S
The type for block errors.
The type for write errors.
val pp_write_error : write_error Fmt.t
pp_write_error
is the pretty-printer for write errors.
include Mirage_device.S
val get_info : t -> Mirage_block.info Lwt.t
Query the characteristics of a specific block device
read device sector_start buffers
reads data starting at sector_start
from the block device into buffers
. Ok ()
means the buffers have been filled. Error _
indicates an I/O error has happened and some of the buffers may not be filled. Each of elements in the list buffers
must be a whole number of sectors in length. The list of buffers can be of any length.
val write : t -> int64 -> Cstruct.t list -> (unit, write_error) result Lwt.t
write device sector_start buffers
writes data from buffers
onto the block device starting at sector_start
. Ok ()
means the contents of the buffers have been written. Error _
indicates a partial failure in which some of the writes may not have happened.
Once submitted, it is not possible to cancel a request and there is no timeout.
The operation may fail with:
`Unimplemented
: the operation has not been implemented, no data has been written.`Is_read_only
: the device is read-only, no data has been written.`Disconnected
: the device has been disconnected at application request, an unknown amount of data has been written.
Each of buffers
must be a whole number of sectors in length. The list of buffers can be of any length.
The data will not be copied, so the supplied buffers must not be re-used until the IO operation completes.
val connect :
?progress_cb:([ `Percent of int | `Complete ] -> unit) ->
Primary.t ->
Secondary.t ->
t Lwt.t
connect ?progress primary secondary
creates a block device which performs I/O against primary
, while building a mirror of primary
on top of secondary
in the background. Existing data in secondary
will be destroyed.
If ?progress_cb
is provided then it will be called on every percentage change in mirror progress.
It is an error if the block size of either primary
or secondary
is not an integer multiple of the other.
It is an error if primary
and secondary
have different lengths.
It is an error if secondary
is read-only.
val string_of_error : error -> string