The format!() result can be passed directly to functions that accept
traits like AsRef<str>.
BUG=b:365852007
TEST=tools/clippy # with rust-toolchain 1.81
Change-Id: I5ff01690602b056fd4493d6d3af053d507bd7765
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5902374
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Instead of having Builder and a path to the root directory separately,
the Builder struct should contain the root directory so we can contain
all the file system configuration inside of the builder.
BUG=b:329359333
TEST=presubmit
Change-Id: I4e97c170ffa3a7fc720063b4f97c813f2fde3863
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5889313
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Use 256-byte inode instead of the traditinal 128-byte one so we
will be able to store xattr values in inodes's extra areas.
BUG=b:333988434
TEST=presubmit
Change-Id: I054eddbeb61a4da4e57b02725b1e3d1ea3df6356
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5884844
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Introduce `Builder` struct for creating file system.
We define intermediate structures for each step of creating ext2,
which makes it easier to change the filesystem construction logic in
the following CL.
BUG=b:329359333
TEST=presubmit
Change-Id: Ib05f838f135636dfcc0d2d04bbcb402b4785c162
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5851191
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
When a source directory path is given to the ext2 logic, its metadata
such as mode should be copied to the disk.
Before this patch, some unit tests that dump files in the created file
system with `debugfs` failed to clean up these files after completion
because the top directory permission is not set properly.
BUG=b:351994509
TEST=CQ
Change-Id: I9315d8cae45a738e8abcda1a4313a89d5fa7bd16
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5687140
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
This also upgrades the dev_container to package the new Rust version.
A few final clippy fixes are included as well.
BUG=b:344974550
TEST=tools/clippy
Change-Id: Iab4253e9cd88fdae989bb5b5170040b6af85baca
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5609084
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Symbolic links that are longer than or equal to 60 bytes require
a block allocated to store its destination because it won't fit
in Inode's i_block.
BUG=b:342937495
TEST=cargo test
Change-Id: Iadab10887c136019fe85e74fa981542384f48ad2
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5569438
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
In ext2, if symlink name is shorter than 60 bytes, the data is
stored in the i_block member in inode.
BUG=b:342937495
TEST=cargo test
TEST=start VM with pmem-ext2
Change-Id: I1bac1405625af92cf521d8da502b19a1deacad20
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5569437
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
To allow files larger than (4*12)KiB, support indirect blocks and
double-indirect blocks so it now supports ~4GB files.
BUG=b:342937441
TEST=cargo test in /ext2
Change-Id: I0b8fd421e85d0a5e203876aa260077448f740737
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5569436
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
In the current implementation, the data structure of superblock is
allocated on heap first and written into MemoryMapping area at the
end.
Instead, this CL implements an arena allocator over MemoryMapping
so we can prepare MemoryMapping first and allocate superblock and
other data structures on the area.
BUG=b:331531953
TEST=cargo test
Change-Id: Ie292d448f1c7bce7a23c8194b9e30e5f278ba2c6
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5490599
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Add a logic to create a valid superblock.
This crate is supposed to be used for implementing virito-pmem-ext2,
which is a virtio-pmem where ext2 file system is constructed at
boot time. See go/virtio-pmem-ext2 for the details.
BUG=b:329359333
TEST=cargo test
Change-Id: Ib86c0c8e9562e885266d3b321f9f2e302581b90a
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5404370
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>