Commit graph

20 commits

Author SHA1 Message Date
Daniel Verkamp
951d0ee77b ext2: fix needless borrow clippy warnings
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>
2024-10-02 07:07:17 +00:00
Keiichi Watanabe
8eca6e616a ext2: Support xattr that fits inode records
BUG=b:333988434
TEST=cargo test

Change-Id: Id0446dad447d580096f97d47bf4884887c0ebe8c
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5592330
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-10-01 09:16:02 +00:00
Keiichi Watanabe
caebe43a88 ext2: Make Builder take a root directory path
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>
2024-09-25 09:42:23 +00:00
Keiichi Watanabe
1356b8277a ext2: Extend Inode size to 256
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>
2024-09-25 09:42:14 +00:00
Keiichi Watanabe
f727b45a39 ext2: Use builder pattern for creating fs
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>
2024-09-12 07:32:22 +00:00
Keiichi Watanabe
046a6acc64 ext2: Fix permission of the root directory
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>
2024-07-10 13:46:48 +00:00
Keiichi Watanabe
4bff23b830 ext2: Support multiple block groups
BUG=b:331764754
TEST=cargo test in ext2
TEST=run mkfs for arcvm's /ro/ and check md5sum for every files
    $ my-mkfs --src ./arcvm-ro/ --output foo.img \
        --blocks-per-group 32768 --inodes-per-group 2048 \
	--size 1342177280
    $ mount foo.img ./mount/ && cd mount
    $ find . -type f | xargs md5sum | sort > my-hash.txt
    $ diff original-hash.txt my-hash.txt

Change-Id: I3b1ba18e4a0f01ffed0ed11d58c30ee8a494cd82
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5627460
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-07-03 02:02:26 +00:00
Keiichi Watanabe
adffb38c84 ext2: Support so many directory entires that require multiple blocks
BUG=b:331901633
TEST=cargo test

Change-Id: Id9a95265eb026af9ef65bb85919d9cf2bdf3ea66
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5610912
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-06-21 08:14:14 +00:00
Keiichi Watanabe
44f0fc1818 ext2: Ignore host-side lost+found
Ignore '/lost+found/' in the top-level directory to avoid conflict.

BUG=b:329359333
TEST=Run a VM
TEST=cargo run

Change-Id: Ia5c391c45ed47394c439e251205a79ac70ea0ab5
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5635977
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
2024-06-21 08:09:07 +00:00
Daniel Verkamp
8c2a5647d1 rust-toolchain: update to Rust 1.77.2
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>
2024-06-18 18:21:17 +00:00
Keiichi Watanabe
c8bb0b0be5 ext2: Support longer symlinks
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>
2024-06-17 12:22:13 +00:00
Keiichi Watanabe
79429edb3f ext2: Support symlinks whose length is less than 60 bytes
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>
2024-06-17 12:21:55 +00:00
Keiichi Watanabe
80dc747e0d ext2: Support indirect/double-indirect blocks
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>
2024-06-17 12:21:50 +00:00
Keiichi Watanabe
28847f9303 ext2: Add more test cases for filesystem creation
- Supporting nested directories
- Comparing file contents
- Maxium length of file name

BUG=b:329359333
TEST=cargo test

Change-Id: Ie5e7762b198f2d3f0c9009c33234ac5feb1ccefe
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5600020
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-06-17 12:20:46 +00:00
Keiichi Watanabe
0eccc54c50 ext2: Allow constructing a file system from a directory
BUG=b:329359333
TEST=cargo test

Change-Id: I3279426ee3ad5fa593075705acc4a5b1e8572d64
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5439156
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-06-17 11:57:48 +00:00
Keiichi Watanabe
14907b14a6 ext2: Set up root dir and lost+found
Now, it can create a valid ext2 disk.

BUG=b:329359333
TEST=cargo test

Change-Id: I7ccf32810ec06291aea971e22ad839f9c9011036
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5400931
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-06-10 02:26:46 +00:00
Keiichi Watanabe
7f122044de ext2: Support group descriptor and bit maps
BUG=b:329359333
TEST=cargo test

Change-Id: I4a3b6db64c582f400fce2473d068117a1a616802
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5404440
Reviewed-by: Takaya Saeki <takayas@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2024-05-22 09:16:15 +00:00
Keiichi Watanabe
53a6086399 ext2: Avoid memory copy by using arena allocator
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>
2024-05-22 08:31:13 +00:00
Keiichi Watanabe
0ebf8a6000 ext2: Support customized parameters
Allow changing {blocks,inodes}_per_group.

BUG=b:329359333
TEST=cargo test

Change-Id: I1646f80dbe92dbdafbe4147a8abbd141784aff69
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5400932
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Takaya Saeki <takayas@chromium.org>
2024-05-07 10:46:31 +00:00
Keiichi Watanabe
ae8886cbb7 ext2: Add initial implementation of ext2 crate
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>
2024-04-17 03:04:17 +00:00