A single-consumer single-producer queue on a block device
Module Shared_block
module EraseBlock : sig ... end
module Journal : sig ... end
module Ring : sig ... end

A producer/consumer ring on top of a shared block device. The producer may push variable-sized items (if there is enough space) and the consumer may then pop the items. Items are pushed and popped atomically. There should be at-most-one producer and at-most-one consumer at any point in time. Since block devices have no built-in signalling mechanisms, it is up to the client to either poll for updates or implement another out-of-band signalling mechanism.

module S : sig ... end