-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
:mem Update-mirage-block-partition #10
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,29 +6,42 @@ The reason for this at times perhaps slightly inconvenient interface is it makes | |
|
||
```OCaml | ||
module Make(B : Mirage_block.S)(Clock : Mirage_clock.PCLOCK) = struct | ||
|
||
(* Create a module for partitioning a Mirage block device *) | ||
module Partitioned = Mirage_block_partition.Make(B) | ||
|
||
(* Create a module for accessing a tar KV store on a partitioned block device *) | ||
module Tar = Tar_mirage.Make_KV_RO(Partitioned) | ||
module Chamelon = Kv.Make(Partitioned)(Clock) | ||
|
||
(* Create a module for accessing a Chameleon filesystem on a partitioned block device *) | ||
module Chameleon = Kv.Make(Partitioned)(Clock) | ||
|
||
(* Connect to the block device and partition it into three sub-blocks *) | ||
let%bind connect_and_partition b = | ||
let%bind b1, rest = Partitioned.connect (Sectors.of_int 20) b in | ||
let b2, b3 = Partitioned.subpartition (Sectors.of_int 8192) rest in | ||
(* Return a tuple containing the three sub-blocks *) | ||
return (b1, b2, b3) | ||
Comment on lines
+19
to
+23
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This function(?) is not used There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am really sorry for my mistake or misunderstanding that may have arisen in the code. It appears that the previously submitted code contains an error, as the connect_and_partition function is utilized within the start function. The function named "connect_and_partition" establishes a connection with the Mirage block device "b" provided by the user. It then proceeds to partition the device into three sub-blocks. The resulting sub-blocks are returned as a tuple (b1, b2, b3) using the Lwt monadic syntax. The let%bind keyword is utilized to bind the outcome of a function to a variable within the framework of the Lwt monad. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is not "utilized" anywhere. I also don't believe you can use the let%bind syntax for functions. |
||
|
||
let start b = | ||
let open Lwt.Syntax in | ||
(* b1 is the first twenty sectors, b2 is the next 8k sectors (4 MiB), | ||
and b3 is the remaining space. Note that the initial [connect] call is | ||
asynchronous while the later [subpartition] calls are not. If the | ||
partition point is outside the block device or subpartition then an | ||
exception is raised. *) | ||
let* b1, rest = Partitioned.connect 20L b in | ||
let b2, b3 = Partitioned.subpartition 8192L rest in | ||
(* now use e.g. b1 as a tar KV store, b2 as a chamelon filesystem, | ||
b3 as a raw block device... *) | ||
let* tar = Tar.connect b1 | ||
and* chamelon = Chamelon.connect ~program_size:16 b2 in | ||
... | ||
(* Connect to the block device and partition it into three sub-blocks *) | ||
let* b1, rest = Partitioned.connect (Sectors.of_int 20) b in | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where does There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The function Sectors.of_int is utilized to transform an integer value into a Sectors.t value, which is a type alias that denotes an Int64.t value that signifies the quantity of disk sectors measuring 512 bytes. The Mirage_block library or a library that depends on it may contain the Sectors module, which is most likely defined elsewhere in the codebase. It's difficult to pinpoint exactly where Sectors and Sectors.of_int originate without additional context or details, but they are probably defined somewhere in the used codebase. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What does "most likely defined elsewhere" mean? And what does the function do with the int? |
||
let b2, b3 = Partitioned.subpartition (Sectors.of_int 8192) rest in | ||
|
||
(* Connect to the tar KV store on the first sub-block *) | ||
let* tar = Tar.connect b1 in | ||
|
||
(* Connect to the Chameleon filesystem on the second sub-block *) | ||
let* chameleon = Chameleon.connect ~program_size:16 b2 in | ||
|
||
(* Other code using the connected devices *) | ||
... | ||
end | ||
|
||
``` | ||
|
||
|
||
|
||
### mirage-block-partition-mbr | ||
|
||
This module reads a disk labeled with a Master Boot Record and returns a list of pairs of `Mbr.Partition.t` and a block device representing the partition according to the MBR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is this
let%bind
syntax?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The let%bind syntax is an important component of the Lwt monadic programming library. The Lwt library is a software component that offers streamlined threads for the OCaml programming language. This feature enables programmers to compose asynchronous and concurrent code that bears resemblance to synchronous code. The let%bind syntax is utilized for the purpose of linking Lwt operations that provide Lwt.t values. The return of a function in the form of Lwt.t denotes a computation that has the potential to conclude asynchronously at a later time.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
let%bind
is not a part of Lwt.