Library
Module
Module type
Parameter
Class
Class type
An in-memory BLOCK device also known as a Ramdisk
include V1_LWT.BLOCK with type id = string
type error = [
| `Unknown of string
an undiagnosed error
*)| `Unimplemented
operation not yet implemented in the code
*)| `Is_read_only
you cannot write to a read/only instance
*)| `Disconnected
the device has been previously disconnected
*) ]
The type for IO operation errors.
type info = {
read_write : bool;
True if we can write, false if read/only
*)sector_size : int;
Octets per sector
*)size_sectors : int64;
Total sectors per device
*)}
Characteristics of the block device. Note some devices may be able to make themselves bigger over time.
val read :
t ->
int64 ->
page_aligned_buffer list ->
[ `Error of error | `Ok of unit ] io
read device sector_start buffers
returns a blocking IO operation which attempts to fill buffers
with data starting at sector_start
. Each of buffers
must be a whole number of sectors in length. The list of buffers can be of any length.
val write :
t ->
int64 ->
page_aligned_buffer list ->
[ `Error of error | `Ok of unit ] io
write device sector_start buffers
returns a blocking IO operation which attempts to write the data contained within buffers
to t
starting at sector_start
. When the IO operation completes then all writes have been persisted.
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.`Unknown
: some other permanent, fatal error (e.g. disk is on fire), where 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 create :
name:string ->
size_sectors:int64 ->
sector_size:int ->
[ `Ok of t | `Error of error ] io
Create an in-memory block device (a "ramdisk") with a given name, total size in sectors and sector size. Two calls to connect
with the same name will return the same block device
Destroy removes an in-memory block device. Subsequent calls to connect
will create a fresh empty device.
resize t new_size_sectors
attempts to resize the connected device to have the given number of sectors. If successful, subsequent calls to get_info
will reflect the new size.
seek_unmapped t start
returns the offset of the next guaranteed zero-filled region (typically guaranteed because it is unmapped)
seek_mapped t start
returns the offset of the next regoin of the device which may have data in it (typically this is the next mapped region)