* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver [not found] <20230609063118.24852-1-amiculas@cisco.com> @ 2023-06-09 10:36 ` Christian Brauner 2023-06-09 11:22 ` Ariel Miculas (amiculas) ` (2 more replies) 0 siblings, 3 replies; 28+ messages in thread From: Christian Brauner @ 2023-06-09 10:36 UTC (permalink / raw) To: Ariel Miculas, linux-fsdevel; +Cc: rust-for-linux, linux-mm On Fri, Jun 09, 2023 at 09:29:58AM +0300, Ariel Miculas wrote: > Hi all! > > This is a proof of concept driver written for the PuzzleFS Uhm, the PuzzleFS filesystem isn't actually sent to fsdevel? Yet I see tons of patches in there that add wrappers to our core fs data structures. I even see a ton of new files that all fall clearly into fsdevel territory: create mode 100644 rust/kernel/cred.rs create mode 100644 rust/kernel/delay.rs create mode 100644 rust/kernel/driver.rs create mode 100644 rust/kernel/file.rs create mode 100644 rust/kernel/fs.rs create mode 100644 rust/kernel/fs/param.rs create mode 100644 rust/kernel/io_buffer.rs create mode 100644 rust/kernel/iov_iter.rs create mode 100644 rust/kernel/mm.rs create mode 100644 rust/kernel/mount.rs create mode 100644 rust/kernel/pages.rs There's also quite a lot of new mm/ in there, no? Any wrappers and code for core fs should be maintained as part of fs. Rust shouldn't become a way to avoid our reviews once you have a few wrappers added somewhere. > next-generation container filesystem [1]. I've included a short abstract > about puzzlefs further below. This driver is based on the rust-next > branch, on top of which I've backported the filesystem abstractions from > Wedson Almeida Filho [2][3] and Miguel Ojeda's third-party crates > support: proc-macro2, quote, syn, serde and serde_derive [4]. I've added > the additional third-party crates serde_cbor[5] and hex [6]. Then I've > adapted the user space puzzlefs code [1] so that the puzzlefs kernel > module could present the directory hierarchy and implement the basic > read functionality. > For some additional context, puzzlefs was started by Tycho Andersen and > it's the successor of atomfs. This FOSDEM presentation from 2019 [12] > covers the rationale for a new oci image format and presents a higher > level overview of our goals with puzzlefs. > I've split the rest of the cover letter in following sections (using a > markdown style): > * Example: it describes a practical example of what was achieved > * Limitations: it presents the existing limitations of this POC > * Upstreaming steps: it describes the steps needed for upstreaming this > driver > * Setup: it shows how to setup the necessary environment for testing the > puzzlefs driver > * Puzzlefs abstract: it provides a short overview of puzzlefs > > # Example > An example is provided below: > > ``` > ~ # cat /proc/filesystems | grep puzzlefs > nodev puzzlefs > ~ # mount -t puzzlefs -o oci_root_dir="/home/puzzlefs_oci" -o image_manifest="2d > 6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b" none /mnt > ~ # ls -lR /mnt/ > /mnt/: > total 0 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-1 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-2 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-3 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-4 > -rw-r--r-- 1 0 0 0 Jun 8 12:26 file1 > -rw-r--r-- 1 0 0 0 Jun 8 12:26 file2 > > /mnt/dir-1: > total 0 > > /mnt/dir-2: > total 0 > > /mnt/dir-3: > total 0 > > /mnt/dir-4: > total 0 > ~ # cat /mnt/file2 > ana are mere bla bla bla > ~ # wc /mnt/file1 > 202 202 5454 /mnt/file1 > ``` > > In this example, /home/puzzlefs_oci is the puzzlefs oci directory: > ``` > ~ # ls -lR /home/puzzlefs_oci/ > /home/puzzlefs_oci/: > total 8 > drwxr-xr-x 3 1000 1000 0 Jun 8 14:33 blobs > -rw-r--r-- 1 1000 1000 266 Jun 8 14:33 index.json > -rw-r--r-- 1 1000 1000 37 Jun 8 14:33 oci-layout > > /home/puzzlefs_oci/blobs: > total 0 > drwxr-xr-x 2 1000 1000 0 Jun 8 14:33 sha256 > > /home/puzzlefs_oci/blobs/sha256: > total 16 > -rw------- 1 1000 1000 89 Jun 8 14:33 2d6602d678140540dc7e96de652a76a8b16eb > -rw------- 1 1000 1000 925 Jun 8 14:33 4df03518eea406343dbb55046720f6a478881 > -rw------- 1 1000 1000 5479 Jun 8 14:33 d86a87b19bd9a2fec0d31687c1d669cdb59eb > ``` > > `2d6602d678140540dc7e96de652a76a8b16eb` is the puzzlefs image manifest > hash for the first_try tag: > ``` > $ cat /tmp/oci-simple/index.json | jq . > { > "schemaVersion": -1, > "manifests": [ > { > "digest": "sha256:2d6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b", > "size": 89, > "media_type": "application/vnd.puzzlefs.image.rootfs.v1", > "annotations": { > "org.opencontainers.image.ref.name": "first_try" > } > } > ], > "annotations": {} > } > ``` > > I will describe how to build a puzzlefs image in the `Setup` section, at > step 5. > > # Limitations > One limitation is that the puzzlefs driver doesn't implement any lookup > functionality and instead it inserts every directory entry into the > dcache during init (see the `DCACHE_BASED` constant). This is similar to > how the sample `rust_fs` driver works, but the goal is to implement > proper lookup functions. However, more filesystem abstractions need to > be implemented before this can be achieved. > > # Upstreaming steps > Before the puzzlefs driver can be upstreamed, the following need to be > merged: > * Wedson's filesystem abstractions [3] > * the necessary third-party crates [4] (with the preliminary discussion > about whether this is desirable) > > # Setup > My setup is based on Wedson's tutorial [8]. Next, I will describe the > necessary steps to build an initrd and run a custom kernel under qemu. > > 1. Get the linux rust-next branch [9] and apply this patchset > > 2. Follow the rust quickstart guide [10] > > 3. configure and build the kernel > ``` > $ make LLVM=1 allnoconfig qemu-busybox-min.config rust.config > $ make LLVM=1 -j$(nproc) > ``` > > 4. setup busybox > ``` > git clone git://git.busybox.net/busybox > cd busybox > make menuconfig # enable 'Build static binary' config > make > make install > ``` > This will create the `_install` directory with the rootfs inside it. > > 5. create a home directory in the rootfs and copy a puzzlefs oci > directory in home/puzzlefs_oci > To create a puzzlefs oci directory: > * download this custom puzzlefs repository [11] (it's custom because we > want to build an image without verity data) > * run `make release` > * create a simple filesystem structure with a few directories and files > (I've created one at ../test-puzzlefs/simple_rootfs) > * build a puzzlefs oci image at > `~/work/busybox/_install/home/puzzlefs_oci` (replace this path with > your busybox path) with the tag `first_try`: > ``` > $ target/release/puzzlefs build --omit-verity \ > ../test-puzzlefs/simple_rootfs ~/work/busybox/_install/home/puzzlefs_oci \ > first_try > ``` > * get first_try's image manifest from index.json (inside `puzzlefs_oci`) > ``` > $ cat index.json | jq . | grep digest > "digest": "sha256:2d6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b", > ``` > > 6. add the following 'init' script in the busybox rootfs (rootfs path > defaults to `./_install'): > ``` > #!/bin/sh > mount -t devtmpfs none /dev > mkdir -p /proc > mount -t proc none /proc > > ifconfig lo up > udhcpc -i eth0 > > mkdir /mnt > mount -t puzzlefs -o oci_root_dir="/home/puzzlefs_oci" -o \ > image_manifest="2d6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b" \ > none /mnt > > setsid sh -c 'exec sh -l </dev/ttyS0 >/dev/ttyS0 2>&1' > ``` > > Make sure to replace the `image_manifest` with your own digest. This > init script will be passed to rdinit in the kernel command line. > > 7. generate the initramfs > > Assuming busybox is in `~/work/busybox`: > ``` > cd ~/work/busybox/_install && find . | cpio -H newc -o | gzip > ../ramdisk.img > ``` > This will generate a compressed ramdisk image in > `~/work/busybox/ramdisk.img`. > > 8. run with qemu (this assumes the linux tree is at '../linux' and busybox > is at '../busybox'): > ``` > qemu-system-x86_64 \ > -accel kvm \ > -cpu host \ > -m 4G \ > -initrd ../busybox/ramdisk.img \ > -kernel ../linux/arch/x86/boot/bzImage \ > -nographic \ > -append 'console=ttyS0 nokaslr debug rdinit=/init' \ > -nic user,model=rtl8139 \ > -no-reboot > ``` > > 9. Check whether puzzlefs has been successfully mounted > ``` > ~ # mount | grep puzzlefs > none on /mnt type puzzlefs (rw,relatime) > ~ # ls /mnt/ > dir-1 dir-2 dir-3 dir-4 file1 file2 > ``` > > > # Puzzlefs abstract > Puzzlefs [1] is a container filesystem designed to address the > limitations of the existing OCI format. The main goals of the project > are reduced duplication, reproducible image builds, direct mounting > support and memory safety guarantees, some inspired by the OCIv2 design > document [7]. > > Reduced duplication is achieved using the content defined chunking > algorithm FastCDC. This implementation allows chunks to be shared among > layers. Building a new layer starting from an existing one allows > reusing most of the chunks. > > Another goal of the project is reproducible image builds, which is > achieved by defining a canonical representation of the image format. > > Direct mounting support is a key feature of puzzlefs and, together with > fs-verity, it provides data integrity. Currently, puzzlefs is > implemented as a userspace filesystem (FUSE). A read-only kernel > filesystem driver is underway. > > Lastly, memory safety is critical to puzzlefs, leading to the decision > to implement it in Rust. Another goal is to share the same code between > user space and kernel space in order to provide one secure > implementation. > > > [1] https://github.com/anuvu/puzzlefs > [2] https://github.com/wedsonaf/linux/tree/fs > [3] https://github.com/Rust-for-Linux/linux/issues/1004 > [4] https://github.com/Rust-for-Linux/linux/pull/1007 > [5] https://docs.rs/serde_cbor/latest/serde_cbor/ > [6] https://docs.rs/hex/0.4.3/hex/ > [7] https://hackmd.io/@cyphar/ociv2-brainstorm > [8] https://www.youtube.com/watch?v=tPs1uRqOnlk > [9] https://github.com/Rust-for-Linux/linux/tree/rust-next > [10] https://docs.kernel.org/rust/quick-start.html > [11] https://github.com/ariel-miculas/puzzlefs/tree/support-no-verity-data > [12] https://archive.fosdem.org/2019/schedule/event/containers_atomfs/ > > Ariel Miculas (58): > rust: kernel: add libraries required by the filesystem abstractions > rust: kernel: backport the delay module from the rust branch > rust: kernel: add container_of macro > rust: kernel: add offset_of macro > drop: Add crate::pr_warn declaration > rust: kernel: rename from_kernel_errno to from_errno > rust: kernel: Rename from_pointer to from_foreing and into_pointer to > into_foreign > rust: kernel: add count_paren_items macro, needed by define_fs_params > macro > rust: helpers: add missing rust helper 'alloc_pages' > kernel: configs: add qemu-busybox-min.config > rust: kernel: format the rust code > samples: puzzlefs: add initial puzzlefs sample, copied from rust_fs.rs > kernel: configs: enable rust samples in rust.config > Add SAMPLE_RUST_SERDE in rust.config > rust: kernel: fix compile errors after rebase to rust-next > rust: serde_cbor: import crate > rust: serde_cbor: add SPDX License Identifiers > rust: serde_cbor: add no_fp_fmt_parse support > rust: Kbuild: enable serde_cbor > samples: rust: add cbor serialize/deserialize example > rust: serde_cbor: add support for serde_cbor's from_slice method by > using a custom alloc_kernel feature > rust: serde: add support for deserializing Vec with kernel_alloc > feature > rust: file: Replace UnsafeCell with Opaque for File > rust: kernel: implement fmt::Debug for CString > samples: puzzlefs: rename RustFs to PuzzleFs > samples: puzzlefs: add basic deserializing support for the puzzlefs > metadata > rust: file: present the filesystem context to the open function > rust: kernel: add an abstraction over vfsmount to allow cloning a new > private mount > rust: file: add from_path, from_path_in_root_mnt and read_with_offset > methods to File > samples: puzzlefs: pass the Vfsmount structure from open to read and > return the contents of the data file inside /home/puzzlefs_oci > rust: file: move from_path, from_path_in_root_mnt and read_with_offset > methods to a RegularFile newtype > rust: file: ensure RegularFile can only create regular files > rust: file: add get_pos method to RegularFile > rust: file: add methods read_to_end, get_file_size and update_pos to > RegularFile > rust: file: define a minimal Read trait and implement it for > RegularFile > samples: puzzlefs: add cbor_get_array_size method > samples: puzzlefs: add KernelError to WireFormatError and implement > From conversion > samples: puzzlefs: implement new for MetadataBlob > samples: puzzlefs: build puzzlefs into the kernel, thus avoiding the > need to export rust symbols > rust: alloc: add try_clone for Vec<T> > rust: alloc: add from_iter_fallible for Vec<T> > samples: puzzlefs: implement to_errno and from_errno for > WireFormatError > samples: puzzlefs: add TryReserveError (and from conversion) to > WireFormatError > samples: puzzlefs: add higher level inode related functionality > samples: puzzlefs: populate the directory entries with the inodes from > the puzzlefs metadata file > rust: hex: import crate > rust: hex: add SPDX license identifiers > rust: Kbuild: enable `hex` > rust: hex: implement FromHex trait and hex::decode using a custom > kernel_alloc feature > rust: hex: add encode_hex_iter and encode_hex_upper_iter methods > rust: puzzlefs: add HexError to WireFormatError and implement the From > conversion > rust: puzzlefs: display the error value for > WireFormatError::KernelError > samples: puzzlefs: add Rootfs and Digest structs to types.rs > samples: puzzlefs: implement the conversion from WireFormatError to > kernel::error::Error > rust: puzzlefs: read the puzzlefs image manifest instead of an > individual metadata layer > rust: puzzlefs: rename PuzzleFs to PuzzleFsModule to avoid confusion > with the PuzzleFS struct > rust: puzzlefs: add support for reading files > rust: puzzlefs: add oci_root_dir and image_manifest filesystem > parameters > > Miguel Ojeda (15): > rust: proc-macro2: import crate > rust: proc-macro2: add SPDX License Identifiers > rust: proc-macro2: remove `unicode_ident` dependency > rust: quote: import crate > rust: quote: add SPDX License Identifiers > rust: syn: import crate > rust: syn: add SPDX License Identifiers > rust: syn: remove `unicode-ident` dependency > rust: serde: import crate > rust: serde: add `no_fp_fmt_parse` support > rust: serde: add SPDX License Identifiers > rust: serde_derive: import crate > rust: serde_derive: add SPDX License Identifiers > rust: Kbuild: enable `proc-macro2`, `quote`, `syn`, `serde` and > `serde_derive` > rust: test `serde` support > > Wedson Almeida Filho (7): > rust: add definitions for ref-counted inodes and dentries > rust: add ability to register a file system > rust: define fs context > rust: add support for file system parameters > rust: allow fs driver to initialise new superblocks > rust: add `module_fs` macro > WIP: rust: allow fs to be populated > > Makefile | 14 +- > arch/x86/configs/qemu-busybox-min.config | 11 + > kernel/configs/qemu-busybox-min.config | 56 + > kernel/configs/rust.config | 11 + > rust/.gitignore | 1 + > rust/Makefile | 232 +- > rust/alloc/vec/mod.rs | 48 + > rust/bindings/bindings_helper.h | 14 + > rust/bindings/lib.rs | 5 + > rust/helpers.c | 76 + > rust/hex/error.rs | 78 + > rust/hex/lib.rs | 506 +++ > rust/hex/serde.rs | 104 + > rust/kernel/cred.rs | 46 + > rust/kernel/delay.rs | 104 + > rust/kernel/driver.rs | 28 + > rust/kernel/error.rs | 52 +- > rust/kernel/file.rs | 1117 ++++++ > rust/kernel/fs.rs | 1478 ++++++++ > rust/kernel/fs/param.rs | 558 +++ > rust/kernel/io_buffer.rs | 153 + > rust/kernel/iov_iter.rs | 81 + > rust/kernel/lib.rs | 83 + > rust/kernel/mm.rs | 149 + > rust/kernel/mount.rs | 66 + > rust/kernel/pages.rs | 144 + > rust/kernel/str.rs | 6 + > rust/kernel/test_serde.rs | 26 + > rust/kernel/test_serde/de.rs | 439 +++ > rust/kernel/test_serde/error.rs | 73 + > rust/kernel/test_serde/ser.rs | 466 +++ > rust/kernel/user_ptr.rs | 175 + > rust/proc-macro2/detection.rs | 77 + > rust/proc-macro2/fallback.rs | 1004 ++++++ > rust/proc-macro2/lib.rs | 1341 ++++++++ > rust/proc-macro2/marker.rs | 20 + > rust/proc-macro2/parse.rs | 874 +++++ > rust/proc-macro2/rcvec.rs | 144 + > rust/proc-macro2/wrapper.rs | 996 ++++++ > rust/quote/ext.rs | 112 + > rust/quote/format.rs | 170 + > rust/quote/ident_fragment.rs | 88 + > rust/quote/lib.rs | 1436 ++++++++ > rust/quote/runtime.rs | 440 +++ > rust/quote/spanned.rs | 45 + > rust/quote/to_tokens.rs | 211 ++ > rust/serde/de/format.rs | 32 + > rust/serde/de/ignored_any.rs | 246 ++ > rust/serde/de/impls.rs | 2755 +++++++++++++++ > rust/serde/de/mod.rs | 2313 +++++++++++++ > rust/serde/de/seed.rs | 21 + > rust/serde/de/utf8.rs | 48 + > rust/serde/de/value.rs | 1718 ++++++++++ > rust/serde/integer128.rs | 84 + > rust/serde/lib.rs | 351 ++ > rust/serde/macros.rs | 238 ++ > rust/serde/private/de.rs | 2997 ++++++++++++++++ > rust/serde/private/doc.rs | 161 + > rust/serde/private/mod.rs | 52 + > rust/serde/private/ser.rs | 1316 +++++++ > rust/serde/private/size_hint.rs | 23 + > rust/serde/ser/fmt.rs | 180 + > rust/serde/ser/impls.rs | 987 ++++++ > rust/serde/ser/impossible.rs | 218 ++ > rust/serde/ser/mod.rs | 1992 +++++++++++ > rust/serde/std_error.rs | 50 + > rust/serde_cbor/de.rs | 1370 ++++++++ > rust/serde_cbor/error.rs | 320 ++ > rust/serde_cbor/lib.rs | 371 ++ > rust/serde_cbor/read.rs | 647 ++++ > rust/serde_cbor/ser.rs | 748 ++++ > rust/serde_cbor/tags.rs | 224 ++ > rust/serde_cbor/value/de.rs | 168 + > rust/serde_cbor/value/mod.rs | 158 + > rust/serde_cbor/value/ser.rs | 447 +++ > rust/serde_cbor/write.rs | 177 + > rust/serde_derive/bound.rs | 408 +++ > rust/serde_derive/de.rs | 3148 +++++++++++++++++ > rust/serde_derive/dummy.rs | 46 + > rust/serde_derive/fragment.rs | 76 + > rust/serde_derive/internals/ast.rs | 204 ++ > rust/serde_derive/internals/attr.rs | 1908 +++++++++++ > rust/serde_derive/internals/case.rs | 199 ++ > rust/serde_derive/internals/check.rs | 445 +++ > rust/serde_derive/internals/ctxt.rs | 64 + > rust/serde_derive/internals/mod.rs | 30 + > rust/serde_derive/internals/receiver.rs | 287 ++ > rust/serde_derive/internals/respan.rs | 18 + > rust/serde_derive/internals/symbol.rs | 71 + > rust/serde_derive/lib.rs | 112 + > rust/serde_derive/pretend.rs | 203 ++ > rust/serde_derive/ser.rs | 1342 ++++++++ > rust/serde_derive/this.rs | 34 + > rust/serde_derive/try.rs | 26 + > rust/syn/attr.rs | 664 ++++ > rust/syn/await.rs | 4 + > rust/syn/bigint.rs | 68 + > rust/syn/buffer.rs | 400 +++ > rust/syn/custom_keyword.rs | 255 ++ > rust/syn/custom_punctuation.rs | 302 ++ > rust/syn/data.rs | 495 +++ > rust/syn/derive.rs | 276 ++ > rust/syn/discouraged.rs | 196 ++ > rust/syn/error.rs | 430 +++ > rust/syn/export.rs | 41 + > rust/syn/expr.rs | 3560 +++++++++++++++++++ > rust/syn/ext.rs | 141 + > rust/syn/file.rs | 127 + > rust/syn/gen/clone.rs | 2243 ++++++++++++ > rust/syn/gen/debug.rs | 3044 +++++++++++++++++ > rust/syn/gen/eq.rs | 2197 ++++++++++++ > rust/syn/gen/fold.rs | 3343 ++++++++++++++++++ > rust/syn/gen/hash.rs | 2871 ++++++++++++++++ > rust/syn/gen/visit.rs | 3788 +++++++++++++++++++++ > rust/syn/gen/visit_mut.rs | 3788 +++++++++++++++++++++ > rust/syn/gen_helper.rs | 156 + > rust/syn/generics.rs | 1339 ++++++++ > rust/syn/group.rs | 284 ++ > rust/syn/ident.rs | 103 + > rust/syn/item.rs | 3315 ++++++++++++++++++ > rust/syn/lib.rs | 985 ++++++ > rust/syn/lifetime.rs | 156 + > rust/syn/lit.rs | 1602 +++++++++ > rust/syn/lookahead.rs | 171 + > rust/syn/mac.rs | 221 ++ > rust/syn/macros.rs | 179 + > rust/syn/op.rs | 236 ++ > rust/syn/parse.rs | 1316 +++++++ > rust/syn/parse_macro_input.rs | 181 + > rust/syn/parse_quote.rs | 169 + > rust/syn/pat.rs | 929 +++++ > rust/syn/path.rs | 856 +++++ > rust/syn/print.rs | 18 + > rust/syn/punctuated.rs | 1070 ++++++ > rust/syn/reserved.rs | 46 + > rust/syn/sealed.rs | 6 + > rust/syn/span.rs | 69 + > rust/syn/spanned.rs | 116 + > rust/syn/stmt.rs | 351 ++ > rust/syn/thread.rs | 43 + > rust/syn/token.rs | 1015 ++++++ > rust/syn/tt.rs | 109 + > rust/syn/ty.rs | 1288 +++++++ > rust/syn/verbatim.rs | 35 + > rust/syn/whitespace.rs | 67 + > samples/rust/Kconfig | 28 + > samples/rust/Makefile | 3 + > samples/rust/local_data_format/de.rs | 422 +++ > samples/rust/local_data_format/error.rs | 73 + > samples/rust/local_data_format/ser.rs | 443 +++ > samples/rust/puzzle.rs | 4 + > samples/rust/puzzle/error.rs | 91 + > samples/rust/puzzle/inode.rs | 150 + > samples/rust/puzzle/oci.rs | 71 + > samples/rust/puzzle/types.rs | 389 +++ > samples/rust/puzzle/types/cbor_helpers.rs | 50 + > samples/rust/puzzlefs.rs | 220 ++ > samples/rust/rust_fs.rs | 105 + > samples/rust/rust_serde.rs | 125 + > scripts/Makefile.build | 4 +- > 160 files changed, 89204 insertions(+), 29 deletions(-) > create mode 100644 arch/x86/configs/qemu-busybox-min.config > create mode 100644 kernel/configs/qemu-busybox-min.config > create mode 100644 rust/hex/error.rs > create mode 100644 rust/hex/lib.rs > create mode 100644 rust/hex/serde.rs > create mode 100644 rust/kernel/cred.rs > create mode 100644 rust/kernel/delay.rs > create mode 100644 rust/kernel/driver.rs > create mode 100644 rust/kernel/file.rs > create mode 100644 rust/kernel/fs.rs > create mode 100644 rust/kernel/fs/param.rs > create mode 100644 rust/kernel/io_buffer.rs > create mode 100644 rust/kernel/iov_iter.rs > create mode 100644 rust/kernel/mm.rs > create mode 100644 rust/kernel/mount.rs > create mode 100644 rust/kernel/pages.rs > create mode 100644 rust/kernel/test_serde.rs > create mode 100644 rust/kernel/test_serde/de.rs > create mode 100644 rust/kernel/test_serde/error.rs > create mode 100644 rust/kernel/test_serde/ser.rs > create mode 100644 rust/kernel/user_ptr.rs > create mode 100644 rust/proc-macro2/detection.rs > create mode 100644 rust/proc-macro2/fallback.rs > create mode 100644 rust/proc-macro2/lib.rs > create mode 100644 rust/proc-macro2/marker.rs > create mode 100644 rust/proc-macro2/parse.rs > create mode 100644 rust/proc-macro2/rcvec.rs > create mode 100644 rust/proc-macro2/wrapper.rs > create mode 100644 rust/quote/ext.rs > create mode 100644 rust/quote/format.rs > create mode 100644 rust/quote/ident_fragment.rs > create mode 100644 rust/quote/lib.rs > create mode 100644 rust/quote/runtime.rs > create mode 100644 rust/quote/spanned.rs > create mode 100644 rust/quote/to_tokens.rs > create mode 100644 rust/serde/de/format.rs > create mode 100644 rust/serde/de/ignored_any.rs > create mode 100644 rust/serde/de/impls.rs > create mode 100644 rust/serde/de/mod.rs > create mode 100644 rust/serde/de/seed.rs > create mode 100644 rust/serde/de/utf8.rs > create mode 100644 rust/serde/de/value.rs > create mode 100644 rust/serde/integer128.rs > create mode 100644 rust/serde/lib.rs > create mode 100644 rust/serde/macros.rs > create mode 100644 rust/serde/private/de.rs > create mode 100644 rust/serde/private/doc.rs > create mode 100644 rust/serde/private/mod.rs > create mode 100644 rust/serde/private/ser.rs > create mode 100644 rust/serde/private/size_hint.rs > create mode 100644 rust/serde/ser/fmt.rs > create mode 100644 rust/serde/ser/impls.rs > create mode 100644 rust/serde/ser/impossible.rs > create mode 100644 rust/serde/ser/mod.rs > create mode 100644 rust/serde/std_error.rs > create mode 100644 rust/serde_cbor/de.rs > create mode 100644 rust/serde_cbor/error.rs > create mode 100644 rust/serde_cbor/lib.rs > create mode 100644 rust/serde_cbor/read.rs > create mode 100644 rust/serde_cbor/ser.rs > create mode 100644 rust/serde_cbor/tags.rs > create mode 100644 rust/serde_cbor/value/de.rs > create mode 100644 rust/serde_cbor/value/mod.rs > create mode 100644 rust/serde_cbor/value/ser.rs > create mode 100644 rust/serde_cbor/write.rs > create mode 100644 rust/serde_derive/bound.rs > create mode 100644 rust/serde_derive/de.rs > create mode 100644 rust/serde_derive/dummy.rs > create mode 100644 rust/serde_derive/fragment.rs > create mode 100644 rust/serde_derive/internals/ast.rs > create mode 100644 rust/serde_derive/internals/attr.rs > create mode 100644 rust/serde_derive/internals/case.rs > create mode 100644 rust/serde_derive/internals/check.rs > create mode 100644 rust/serde_derive/internals/ctxt.rs > create mode 100644 rust/serde_derive/internals/mod.rs > create mode 100644 rust/serde_derive/internals/receiver.rs > create mode 100644 rust/serde_derive/internals/respan.rs > create mode 100644 rust/serde_derive/internals/symbol.rs > create mode 100644 rust/serde_derive/lib.rs > create mode 100644 rust/serde_derive/pretend.rs > create mode 100644 rust/serde_derive/ser.rs > create mode 100644 rust/serde_derive/this.rs > create mode 100644 rust/serde_derive/try.rs > create mode 100644 rust/syn/attr.rs > create mode 100644 rust/syn/await.rs > create mode 100644 rust/syn/bigint.rs > create mode 100644 rust/syn/buffer.rs > create mode 100644 rust/syn/custom_keyword.rs > create mode 100644 rust/syn/custom_punctuation.rs > create mode 100644 rust/syn/data.rs > create mode 100644 rust/syn/derive.rs > create mode 100644 rust/syn/discouraged.rs > create mode 100644 rust/syn/error.rs > create mode 100644 rust/syn/export.rs > create mode 100644 rust/syn/expr.rs > create mode 100644 rust/syn/ext.rs > create mode 100644 rust/syn/file.rs > create mode 100644 rust/syn/gen/clone.rs > create mode 100644 rust/syn/gen/debug.rs > create mode 100644 rust/syn/gen/eq.rs > create mode 100644 rust/syn/gen/fold.rs > create mode 100644 rust/syn/gen/hash.rs > create mode 100644 rust/syn/gen/visit.rs > create mode 100644 rust/syn/gen/visit_mut.rs > create mode 100644 rust/syn/gen_helper.rs > create mode 100644 rust/syn/generics.rs > create mode 100644 rust/syn/group.rs > create mode 100644 rust/syn/ident.rs > create mode 100644 rust/syn/item.rs > create mode 100644 rust/syn/lib.rs > create mode 100644 rust/syn/lifetime.rs > create mode 100644 rust/syn/lit.rs > create mode 100644 rust/syn/lookahead.rs > create mode 100644 rust/syn/mac.rs > create mode 100644 rust/syn/macros.rs > create mode 100644 rust/syn/op.rs > create mode 100644 rust/syn/parse.rs > create mode 100644 rust/syn/parse_macro_input.rs > create mode 100644 rust/syn/parse_quote.rs > create mode 100644 rust/syn/pat.rs > create mode 100644 rust/syn/path.rs > create mode 100644 rust/syn/print.rs > create mode 100644 rust/syn/punctuated.rs > create mode 100644 rust/syn/reserved.rs > create mode 100644 rust/syn/sealed.rs > create mode 100644 rust/syn/span.rs > create mode 100644 rust/syn/spanned.rs > create mode 100644 rust/syn/stmt.rs > create mode 100644 rust/syn/thread.rs > create mode 100644 rust/syn/token.rs > create mode 100644 rust/syn/tt.rs > create mode 100644 rust/syn/ty.rs > create mode 100644 rust/syn/verbatim.rs > create mode 100644 rust/syn/whitespace.rs > create mode 100644 samples/rust/local_data_format/de.rs > create mode 100644 samples/rust/local_data_format/error.rs > create mode 100644 samples/rust/local_data_format/ser.rs > create mode 100644 samples/rust/puzzle.rs > create mode 100644 samples/rust/puzzle/error.rs > create mode 100644 samples/rust/puzzle/inode.rs > create mode 100644 samples/rust/puzzle/oci.rs > create mode 100644 samples/rust/puzzle/types.rs > create mode 100644 samples/rust/puzzle/types/cbor_helpers.rs > create mode 100644 samples/rust/puzzlefs.rs > create mode 100644 samples/rust/rust_fs.rs > create mode 100644 samples/rust/rust_serde.rs > > -- > 2.40.1 > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 10:36 ` [RFC PATCH 00/80] Rust PuzzleFS filesystem driver Christian Brauner @ 2023-06-09 11:22 ` Ariel Miculas (amiculas) 2023-06-09 11:45 ` Christian Brauner 2023-06-09 11:42 ` Miguel Ojeda 2023-06-09 23:52 ` Kent Overstreet 2 siblings, 1 reply; 28+ messages in thread From: Ariel Miculas (amiculas) @ 2023-06-09 11:22 UTC (permalink / raw) To: Christian Brauner, linux-fsdevel; +Cc: rust-for-linux, linux-mm [-- Attachment #1: Type: text/plain, Size: 33334 bytes --] Hello Christian, I didn't send these patches to a wider audience because this is an initial prototype of the PuzzleFS driver, and it has a few prerequisites before it could be even considered for merging. First of all, the rust filesystem abstractions and their dependencies need to be upstreamed, then there needs to be a discussion regarding the inclusion of third-party crates in the linux kernel. My plan was to send these patches to the rust-for-linux mailing list and then start a discussion with Miguel Ojeda regarding the upstreaming approach. There are a lot of new files added in this patch series because I've included all the dependencies required so that my patches could be applied to the rust-next branch, but these dependencies will most likely need to be upstreamed separately. It was never my intention to avoid your reviews, should I also send subsequent patches to linux-fsdevel, even if they're in the early stages of development? Regards, Ariel ________________________________ From: Christian Brauner <brauner@kernel.org> Sent: Friday, June 9, 2023 1:36 PM To: Ariel Miculas (amiculas) <amiculas@cisco.com>; linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org> Cc: rust-for-linux@vger.kernel.org <rust-for-linux@vger.kernel.org>; linux-mm@kvack.org <linux-mm@kvack.org> Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver On Fri, Jun 09, 2023 at 09:29:58AM +0300, Ariel Miculas wrote: > Hi all! > > This is a proof of concept driver written for the PuzzleFS Uhm, the PuzzleFS filesystem isn't actually sent to fsdevel? Yet I see tons of patches in there that add wrappers to our core fs data structures. I even see a ton of new files that all fall clearly into fsdevel territory: create mode 100644 rust/kernel/cred.rs create mode 100644 rust/kernel/delay.rs create mode 100644 rust/kernel/driver.rs create mode 100644 rust/kernel/file.rs create mode 100644 rust/kernel/fs.rs create mode 100644 rust/kernel/fs/param.rs create mode 100644 rust/kernel/io_buffer.rs create mode 100644 rust/kernel/iov_iter.rs create mode 100644 rust/kernel/mm.rs create mode 100644 rust/kernel/mount.rs create mode 100644 rust/kernel/pages.rs There's also quite a lot of new mm/ in there, no? Any wrappers and code for core fs should be maintained as part of fs. Rust shouldn't become a way to avoid our reviews once you have a few wrappers added somewhere. > next-generation container filesystem [1]. I've included a short abstract > about puzzlefs further below. This driver is based on the rust-next > branch, on top of which I've backported the filesystem abstractions from > Wedson Almeida Filho [2][3] and Miguel Ojeda's third-party crates > support: proc-macro2, quote, syn, serde and serde_derive [4]. I've added > the additional third-party crates serde_cbor[5] and hex [6]. Then I've > adapted the user space puzzlefs code [1] so that the puzzlefs kernel > module could present the directory hierarchy and implement the basic > read functionality. > For some additional context, puzzlefs was started by Tycho Andersen and > it's the successor of atomfs. This FOSDEM presentation from 2019 [12] > covers the rationale for a new oci image format and presents a higher > level overview of our goals with puzzlefs. > I've split the rest of the cover letter in following sections (using a > markdown style): > * Example: it describes a practical example of what was achieved > * Limitations: it presents the existing limitations of this POC > * Upstreaming steps: it describes the steps needed for upstreaming this > driver > * Setup: it shows how to setup the necessary environment for testing the > puzzlefs driver > * Puzzlefs abstract: it provides a short overview of puzzlefs > > # Example > An example is provided below: > > ``` > ~ # cat /proc/filesystems | grep puzzlefs > nodev puzzlefs > ~ # mount -t puzzlefs -o oci_root_dir="/home/puzzlefs_oci" -o image_manifest="2d > 6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b" none /mnt > ~ # ls -lR /mnt/ > /mnt/: > total 0 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-1 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-2 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-3 > drwxr-xr-x 2 0 0 0 Jun 8 12:26 dir-4 > -rw-r--r-- 1 0 0 0 Jun 8 12:26 file1 > -rw-r--r-- 1 0 0 0 Jun 8 12:26 file2 > > /mnt/dir-1: > total 0 > > /mnt/dir-2: > total 0 > > /mnt/dir-3: > total 0 > > /mnt/dir-4: > total 0 > ~ # cat /mnt/file2 > ana are mere bla bla bla > ~ # wc /mnt/file1 > 202 202 5454 /mnt/file1 > ``` > > In this example, /home/puzzlefs_oci is the puzzlefs oci directory: > ``` > ~ # ls -lR /home/puzzlefs_oci/ > /home/puzzlefs_oci/: > total 8 > drwxr-xr-x 3 1000 1000 0 Jun 8 14:33 blobs > -rw-r--r-- 1 1000 1000 266 Jun 8 14:33 index.json > -rw-r--r-- 1 1000 1000 37 Jun 8 14:33 oci-layout > > /home/puzzlefs_oci/blobs: > total 0 > drwxr-xr-x 2 1000 1000 0 Jun 8 14:33 sha256 > > /home/puzzlefs_oci/blobs/sha256: > total 16 > -rw------- 1 1000 1000 89 Jun 8 14:33 2d6602d678140540dc7e96de652a76a8b16eb > -rw------- 1 1000 1000 925 Jun 8 14:33 4df03518eea406343dbb55046720f6a478881 > -rw------- 1 1000 1000 5479 Jun 8 14:33 d86a87b19bd9a2fec0d31687c1d669cdb59eb > ``` > > `2d6602d678140540dc7e96de652a76a8b16eb` is the puzzlefs image manifest > hash for the first_try tag: > ``` > $ cat /tmp/oci-simple/index.json | jq . > { > "schemaVersion": -1, > "manifests": [ > { > "digest": "sha256:2d6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b", > "size": 89, > "media_type": "application/vnd.puzzlefs.image.rootfs.v1", > "annotations": { > "org.opencontainers.image.ref.name": "first_try" > } > } > ], > "annotations": {} > } > ``` > > I will describe how to build a puzzlefs image in the `Setup` section, at > step 5. > > # Limitations > One limitation is that the puzzlefs driver doesn't implement any lookup > functionality and instead it inserts every directory entry into the > dcache during init (see the `DCACHE_BASED` constant). This is similar to > how the sample `rust_fs` driver works, but the goal is to implement > proper lookup functions. However, more filesystem abstractions need to > be implemented before this can be achieved. > > # Upstreaming steps > Before the puzzlefs driver can be upstreamed, the following need to be > merged: > * Wedson's filesystem abstractions [3] > * the necessary third-party crates [4] (with the preliminary discussion > about whether this is desirable) > > # Setup > My setup is based on Wedson's tutorial [8]. Next, I will describe the > necessary steps to build an initrd and run a custom kernel under qemu. > > 1. Get the linux rust-next branch [9] and apply this patchset > > 2. Follow the rust quickstart guide [10] > > 3. configure and build the kernel > ``` > $ make LLVM=1 allnoconfig qemu-busybox-min.config rust.config > $ make LLVM=1 -j$(nproc) > ``` > > 4. setup busybox > ``` > git clone git://git.busybox.net/busybox > cd busybox > make menuconfig # enable 'Build static binary' config > make > make install > ``` > This will create the `_install` directory with the rootfs inside it. > > 5. create a home directory in the rootfs and copy a puzzlefs oci > directory in home/puzzlefs_oci > To create a puzzlefs oci directory: > * download this custom puzzlefs repository [11] (it's custom because we > want to build an image without verity data) > * run `make release` > * create a simple filesystem structure with a few directories and files > (I've created one at ../test-puzzlefs/simple_rootfs) > * build a puzzlefs oci image at > `~/work/busybox/_install/home/puzzlefs_oci` (replace this path with > your busybox path) with the tag `first_try`: > ``` > $ target/release/puzzlefs build --omit-verity \ > ../test-puzzlefs/simple_rootfs ~/work/busybox/_install/home/puzzlefs_oci \ > first_try > ``` > * get first_try's image manifest from index.json (inside `puzzlefs_oci`) > ``` > $ cat index.json | jq . | grep digest > "digest": "sha256:2d6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b", > ``` > > 6. add the following 'init' script in the busybox rootfs (rootfs path > defaults to `./_install'): > ``` > #!/bin/sh > mount -t devtmpfs none /dev > mkdir -p /proc > mount -t proc none /proc > > ifconfig lo up > udhcpc -i eth0 > > mkdir /mnt > mount -t puzzlefs -o oci_root_dir="/home/puzzlefs_oci" -o \ > image_manifest="2d6602d678140540dc7e96de652a76a8b16e8aca190bae141297bcffdcae901b" \ > none /mnt > > setsid sh -c 'exec sh -l </dev/ttyS0 >/dev/ttyS0 2>&1' > ``` > > Make sure to replace the `image_manifest` with your own digest. This > init script will be passed to rdinit in the kernel command line. > > 7. generate the initramfs > > Assuming busybox is in `~/work/busybox`: > ``` > cd ~/work/busybox/_install && find . | cpio -H newc -o | gzip > ../ramdisk.img > ``` > This will generate a compressed ramdisk image in > `~/work/busybox/ramdisk.img`. > > 8. run with qemu (this assumes the linux tree is at '../linux' and busybox > is at '../busybox'): > ``` > qemu-system-x86_64 \ > -accel kvm \ > -cpu host \ > -m 4G \ > -initrd ../busybox/ramdisk.img \ > -kernel ../linux/arch/x86/boot/bzImage \ > -nographic \ > -append 'console=ttyS0 nokaslr debug rdinit=/init' \ > -nic user,model=rtl8139 \ > -no-reboot > ``` > > 9. Check whether puzzlefs has been successfully mounted > ``` > ~ # mount | grep puzzlefs > none on /mnt type puzzlefs (rw,relatime) > ~ # ls /mnt/ > dir-1 dir-2 dir-3 dir-4 file1 file2 > ``` > > > # Puzzlefs abstract > Puzzlefs [1] is a container filesystem designed to address the > limitations of the existing OCI format. The main goals of the project > are reduced duplication, reproducible image builds, direct mounting > support and memory safety guarantees, some inspired by the OCIv2 design > document [7]. > > Reduced duplication is achieved using the content defined chunking > algorithm FastCDC. This implementation allows chunks to be shared among > layers. Building a new layer starting from an existing one allows > reusing most of the chunks. > > Another goal of the project is reproducible image builds, which is > achieved by defining a canonical representation of the image format. > > Direct mounting support is a key feature of puzzlefs and, together with > fs-verity, it provides data integrity. Currently, puzzlefs is > implemented as a userspace filesystem (FUSE). A read-only kernel > filesystem driver is underway. > > Lastly, memory safety is critical to puzzlefs, leading to the decision > to implement it in Rust. Another goal is to share the same code between > user space and kernel space in order to provide one secure > implementation. > > > [1] https://github.com/anuvu/puzzlefs > [2] https://github.com/wedsonaf/linux/tree/fs > [3] https://github.com/Rust-for-Linux/linux/issues/1004 > [4] https://github.com/Rust-for-Linux/linux/pull/1007 > [5] https://docs.rs/serde_cbor/latest/serde_cbor/ > [6] https://docs.rs/hex/0.4.3/hex/ > [7] https://hackmd.io/@cyphar/ociv2-brainstorm > [8] https://www.youtube.com/watch?v=tPs1uRqOnlk > [9] https://github.com/Rust-for-Linux/linux/tree/rust-next > [10] https://docs.kernel.org/rust/quick-start.html > [11] https://github.com/ariel-miculas/puzzlefs/tree/support-no-verity-data > [12] https://archive.fosdem.org/2019/schedule/event/containers_atomfs/ > > Ariel Miculas (58): > rust: kernel: add libraries required by the filesystem abstractions > rust: kernel: backport the delay module from the rust branch > rust: kernel: add container_of macro > rust: kernel: add offset_of macro > drop: Add crate::pr_warn declaration > rust: kernel: rename from_kernel_errno to from_errno > rust: kernel: Rename from_pointer to from_foreing and into_pointer to > into_foreign > rust: kernel: add count_paren_items macro, needed by define_fs_params > macro > rust: helpers: add missing rust helper 'alloc_pages' > kernel: configs: add qemu-busybox-min.config > rust: kernel: format the rust code > samples: puzzlefs: add initial puzzlefs sample, copied from rust_fs.rs > kernel: configs: enable rust samples in rust.config > Add SAMPLE_RUST_SERDE in rust.config > rust: kernel: fix compile errors after rebase to rust-next > rust: serde_cbor: import crate > rust: serde_cbor: add SPDX License Identifiers > rust: serde_cbor: add no_fp_fmt_parse support > rust: Kbuild: enable serde_cbor > samples: rust: add cbor serialize/deserialize example > rust: serde_cbor: add support for serde_cbor's from_slice method by > using a custom alloc_kernel feature > rust: serde: add support for deserializing Vec with kernel_alloc > feature > rust: file: Replace UnsafeCell with Opaque for File > rust: kernel: implement fmt::Debug for CString > samples: puzzlefs: rename RustFs to PuzzleFs > samples: puzzlefs: add basic deserializing support for the puzzlefs > metadata > rust: file: present the filesystem context to the open function > rust: kernel: add an abstraction over vfsmount to allow cloning a new > private mount > rust: file: add from_path, from_path_in_root_mnt and read_with_offset > methods to File > samples: puzzlefs: pass the Vfsmount structure from open to read and > return the contents of the data file inside /home/puzzlefs_oci > rust: file: move from_path, from_path_in_root_mnt and read_with_offset > methods to a RegularFile newtype > rust: file: ensure RegularFile can only create regular files > rust: file: add get_pos method to RegularFile > rust: file: add methods read_to_end, get_file_size and update_pos to > RegularFile > rust: file: define a minimal Read trait and implement it for > RegularFile > samples: puzzlefs: add cbor_get_array_size method > samples: puzzlefs: add KernelError to WireFormatError and implement > From conversion > samples: puzzlefs: implement new for MetadataBlob > samples: puzzlefs: build puzzlefs into the kernel, thus avoiding the > need to export rust symbols > rust: alloc: add try_clone for Vec<T> > rust: alloc: add from_iter_fallible for Vec<T> > samples: puzzlefs: implement to_errno and from_errno for > WireFormatError > samples: puzzlefs: add TryReserveError (and from conversion) to > WireFormatError > samples: puzzlefs: add higher level inode related functionality > samples: puzzlefs: populate the directory entries with the inodes from > the puzzlefs metadata file > rust: hex: import crate > rust: hex: add SPDX license identifiers > rust: Kbuild: enable `hex` > rust: hex: implement FromHex trait and hex::decode using a custom > kernel_alloc feature > rust: hex: add encode_hex_iter and encode_hex_upper_iter methods > rust: puzzlefs: add HexError to WireFormatError and implement the From > conversion > rust: puzzlefs: display the error value for > WireFormatError::KernelError > samples: puzzlefs: add Rootfs and Digest structs to types.rs > samples: puzzlefs: implement the conversion from WireFormatError to > kernel::error::Error > rust: puzzlefs: read the puzzlefs image manifest instead of an > individual metadata layer > rust: puzzlefs: rename PuzzleFs to PuzzleFsModule to avoid confusion > with the PuzzleFS struct > rust: puzzlefs: add support for reading files > rust: puzzlefs: add oci_root_dir and image_manifest filesystem > parameters > > Miguel Ojeda (15): > rust: proc-macro2: import crate > rust: proc-macro2: add SPDX License Identifiers > rust: proc-macro2: remove `unicode_ident` dependency > rust: quote: import crate > rust: quote: add SPDX License Identifiers > rust: syn: import crate > rust: syn: add SPDX License Identifiers > rust: syn: remove `unicode-ident` dependency > rust: serde: import crate > rust: serde: add `no_fp_fmt_parse` support > rust: serde: add SPDX License Identifiers > rust: serde_derive: import crate > rust: serde_derive: add SPDX License Identifiers > rust: Kbuild: enable `proc-macro2`, `quote`, `syn`, `serde` and > `serde_derive` > rust: test `serde` support > > Wedson Almeida Filho (7): > rust: add definitions for ref-counted inodes and dentries > rust: add ability to register a file system > rust: define fs context > rust: add support for file system parameters > rust: allow fs driver to initialise new superblocks > rust: add `module_fs` macro > WIP: rust: allow fs to be populated > > Makefile | 14 +- > arch/x86/configs/qemu-busybox-min.config | 11 + > kernel/configs/qemu-busybox-min.config | 56 + > kernel/configs/rust.config | 11 + > rust/.gitignore | 1 + > rust/Makefile | 232 +- > rust/alloc/vec/mod.rs | 48 + > rust/bindings/bindings_helper.h | 14 + > rust/bindings/lib.rs | 5 + > rust/helpers.c | 76 + > rust/hex/error.rs | 78 + > rust/hex/lib.rs | 506 +++ > rust/hex/serde.rs | 104 + > rust/kernel/cred.rs | 46 + > rust/kernel/delay.rs | 104 + > rust/kernel/driver.rs | 28 + > rust/kernel/error.rs | 52 +- > rust/kernel/file.rs | 1117 ++++++ > rust/kernel/fs.rs | 1478 ++++++++ > rust/kernel/fs/param.rs | 558 +++ > rust/kernel/io_buffer.rs | 153 + > rust/kernel/iov_iter.rs | 81 + > rust/kernel/lib.rs | 83 + > rust/kernel/mm.rs | 149 + > rust/kernel/mount.rs | 66 + > rust/kernel/pages.rs | 144 + > rust/kernel/str.rs | 6 + > rust/kernel/test_serde.rs | 26 + > rust/kernel/test_serde/de.rs | 439 +++ > rust/kernel/test_serde/error.rs | 73 + > rust/kernel/test_serde/ser.rs | 466 +++ > rust/kernel/user_ptr.rs | 175 + > rust/proc-macro2/detection.rs | 77 + > rust/proc-macro2/fallback.rs | 1004 ++++++ > rust/proc-macro2/lib.rs | 1341 ++++++++ > rust/proc-macro2/marker.rs | 20 + > rust/proc-macro2/parse.rs | 874 +++++ > rust/proc-macro2/rcvec.rs | 144 + > rust/proc-macro2/wrapper.rs | 996 ++++++ > rust/quote/ext.rs | 112 + > rust/quote/format.rs | 170 + > rust/quote/ident_fragment.rs | 88 + > rust/quote/lib.rs | 1436 ++++++++ > rust/quote/runtime.rs | 440 +++ > rust/quote/spanned.rs | 45 + > rust/quote/to_tokens.rs | 211 ++ > rust/serde/de/format.rs | 32 + > rust/serde/de/ignored_any.rs | 246 ++ > rust/serde/de/impls.rs | 2755 +++++++++++++++ > rust/serde/de/mod.rs | 2313 +++++++++++++ > rust/serde/de/seed.rs | 21 + > rust/serde/de/utf8.rs | 48 + > rust/serde/de/value.rs | 1718 ++++++++++ > rust/serde/integer128.rs | 84 + > rust/serde/lib.rs | 351 ++ > rust/serde/macros.rs | 238 ++ > rust/serde/private/de.rs | 2997 ++++++++++++++++ > rust/serde/private/doc.rs | 161 + > rust/serde/private/mod.rs | 52 + > rust/serde/private/ser.rs | 1316 +++++++ > rust/serde/private/size_hint.rs | 23 + > rust/serde/ser/fmt.rs | 180 + > rust/serde/ser/impls.rs | 987 ++++++ > rust/serde/ser/impossible.rs | 218 ++ > rust/serde/ser/mod.rs | 1992 +++++++++++ > rust/serde/std_error.rs | 50 + > rust/serde_cbor/de.rs | 1370 ++++++++ > rust/serde_cbor/error.rs | 320 ++ > rust/serde_cbor/lib.rs | 371 ++ > rust/serde_cbor/read.rs | 647 ++++ > rust/serde_cbor/ser.rs | 748 ++++ > rust/serde_cbor/tags.rs | 224 ++ > rust/serde_cbor/value/de.rs | 168 + > rust/serde_cbor/value/mod.rs | 158 + > rust/serde_cbor/value/ser.rs | 447 +++ > rust/serde_cbor/write.rs | 177 + > rust/serde_derive/bound.rs | 408 +++ > rust/serde_derive/de.rs | 3148 +++++++++++++++++ > rust/serde_derive/dummy.rs | 46 + > rust/serde_derive/fragment.rs | 76 + > rust/serde_derive/internals/ast.rs | 204 ++ > rust/serde_derive/internals/attr.rs | 1908 +++++++++++ > rust/serde_derive/internals/case.rs | 199 ++ > rust/serde_derive/internals/check.rs | 445 +++ > rust/serde_derive/internals/ctxt.rs | 64 + > rust/serde_derive/internals/mod.rs | 30 + > rust/serde_derive/internals/receiver.rs | 287 ++ > rust/serde_derive/internals/respan.rs | 18 + > rust/serde_derive/internals/symbol.rs | 71 + > rust/serde_derive/lib.rs | 112 + > rust/serde_derive/pretend.rs | 203 ++ > rust/serde_derive/ser.rs | 1342 ++++++++ > rust/serde_derive/this.rs | 34 + > rust/serde_derive/try.rs | 26 + > rust/syn/attr.rs | 664 ++++ > rust/syn/await.rs | 4 + > rust/syn/bigint.rs | 68 + > rust/syn/buffer.rs | 400 +++ > rust/syn/custom_keyword.rs | 255 ++ > rust/syn/custom_punctuation.rs | 302 ++ > rust/syn/data.rs | 495 +++ > rust/syn/derive.rs | 276 ++ > rust/syn/discouraged.rs | 196 ++ > rust/syn/error.rs | 430 +++ > rust/syn/export.rs | 41 + > rust/syn/expr.rs | 3560 +++++++++++++++++++ > rust/syn/ext.rs | 141 + > rust/syn/file.rs | 127 + > rust/syn/gen/clone.rs | 2243 ++++++++++++ > rust/syn/gen/debug.rs | 3044 +++++++++++++++++ > rust/syn/gen/eq.rs | 2197 ++++++++++++ > rust/syn/gen/fold.rs | 3343 ++++++++++++++++++ > rust/syn/gen/hash.rs | 2871 ++++++++++++++++ > rust/syn/gen/visit.rs | 3788 +++++++++++++++++++++ > rust/syn/gen/visit_mut.rs | 3788 +++++++++++++++++++++ > rust/syn/gen_helper.rs | 156 + > rust/syn/generics.rs | 1339 ++++++++ > rust/syn/group.rs | 284 ++ > rust/syn/ident.rs | 103 + > rust/syn/item.rs | 3315 ++++++++++++++++++ > rust/syn/lib.rs | 985 ++++++ > rust/syn/lifetime.rs | 156 + > rust/syn/lit.rs | 1602 +++++++++ > rust/syn/lookahead.rs | 171 + > rust/syn/mac.rs | 221 ++ > rust/syn/macros.rs | 179 + > rust/syn/op.rs | 236 ++ > rust/syn/parse.rs | 1316 +++++++ > rust/syn/parse_macro_input.rs | 181 + > rust/syn/parse_quote.rs | 169 + > rust/syn/pat.rs | 929 +++++ > rust/syn/path.rs | 856 +++++ > rust/syn/print.rs | 18 + > rust/syn/punctuated.rs | 1070 ++++++ > rust/syn/reserved.rs | 46 + > rust/syn/sealed.rs | 6 + > rust/syn/span.rs | 69 + > rust/syn/spanned.rs | 116 + > rust/syn/stmt.rs | 351 ++ > rust/syn/thread.rs | 43 + > rust/syn/token.rs | 1015 ++++++ > rust/syn/tt.rs | 109 + > rust/syn/ty.rs | 1288 +++++++ > rust/syn/verbatim.rs | 35 + > rust/syn/whitespace.rs | 67 + > samples/rust/Kconfig | 28 + > samples/rust/Makefile | 3 + > samples/rust/local_data_format/de.rs | 422 +++ > samples/rust/local_data_format/error.rs | 73 + > samples/rust/local_data_format/ser.rs | 443 +++ > samples/rust/puzzle.rs | 4 + > samples/rust/puzzle/error.rs | 91 + > samples/rust/puzzle/inode.rs | 150 + > samples/rust/puzzle/oci.rs | 71 + > samples/rust/puzzle/types.rs | 389 +++ > samples/rust/puzzle/types/cbor_helpers.rs | 50 + > samples/rust/puzzlefs.rs | 220 ++ > samples/rust/rust_fs.rs | 105 + > samples/rust/rust_serde.rs | 125 + > scripts/Makefile.build | 4 +- > 160 files changed, 89204 insertions(+), 29 deletions(-) > create mode 100644 arch/x86/configs/qemu-busybox-min.config > create mode 100644 kernel/configs/qemu-busybox-min.config > create mode 100644 rust/hex/error.rs > create mode 100644 rust/hex/lib.rs > create mode 100644 rust/hex/serde.rs > create mode 100644 rust/kernel/cred.rs > create mode 100644 rust/kernel/delay.rs > create mode 100644 rust/kernel/driver.rs > create mode 100644 rust/kernel/file.rs > create mode 100644 rust/kernel/fs.rs > create mode 100644 rust/kernel/fs/param.rs > create mode 100644 rust/kernel/io_buffer.rs > create mode 100644 rust/kernel/iov_iter.rs > create mode 100644 rust/kernel/mm.rs > create mode 100644 rust/kernel/mount.rs > create mode 100644 rust/kernel/pages.rs > create mode 100644 rust/kernel/test_serde.rs > create mode 100644 rust/kernel/test_serde/de.rs > create mode 100644 rust/kernel/test_serde/error.rs > create mode 100644 rust/kernel/test_serde/ser.rs > create mode 100644 rust/kernel/user_ptr.rs > create mode 100644 rust/proc-macro2/detection.rs > create mode 100644 rust/proc-macro2/fallback.rs > create mode 100644 rust/proc-macro2/lib.rs > create mode 100644 rust/proc-macro2/marker.rs > create mode 100644 rust/proc-macro2/parse.rs > create mode 100644 rust/proc-macro2/rcvec.rs > create mode 100644 rust/proc-macro2/wrapper.rs > create mode 100644 rust/quote/ext.rs > create mode 100644 rust/quote/format.rs > create mode 100644 rust/quote/ident_fragment.rs > create mode 100644 rust/quote/lib.rs > create mode 100644 rust/quote/runtime.rs > create mode 100644 rust/quote/spanned.rs > create mode 100644 rust/quote/to_tokens.rs > create mode 100644 rust/serde/de/format.rs > create mode 100644 rust/serde/de/ignored_any.rs > create mode 100644 rust/serde/de/impls.rs > create mode 100644 rust/serde/de/mod.rs > create mode 100644 rust/serde/de/seed.rs > create mode 100644 rust/serde/de/utf8.rs > create mode 100644 rust/serde/de/value.rs > create mode 100644 rust/serde/integer128.rs > create mode 100644 rust/serde/lib.rs > create mode 100644 rust/serde/macros.rs > create mode 100644 rust/serde/private/de.rs > create mode 100644 rust/serde/private/doc.rs > create mode 100644 rust/serde/private/mod.rs > create mode 100644 rust/serde/private/ser.rs > create mode 100644 rust/serde/private/size_hint.rs > create mode 100644 rust/serde/ser/fmt.rs > create mode 100644 rust/serde/ser/impls.rs > create mode 100644 rust/serde/ser/impossible.rs > create mode 100644 rust/serde/ser/mod.rs > create mode 100644 rust/serde/std_error.rs > create mode 100644 rust/serde_cbor/de.rs > create mode 100644 rust/serde_cbor/error.rs > create mode 100644 rust/serde_cbor/lib.rs > create mode 100644 rust/serde_cbor/read.rs > create mode 100644 rust/serde_cbor/ser.rs > create mode 100644 rust/serde_cbor/tags.rs > create mode 100644 rust/serde_cbor/value/de.rs > create mode 100644 rust/serde_cbor/value/mod.rs > create mode 100644 rust/serde_cbor/value/ser.rs > create mode 100644 rust/serde_cbor/write.rs > create mode 100644 rust/serde_derive/bound.rs > create mode 100644 rust/serde_derive/de.rs > create mode 100644 rust/serde_derive/dummy.rs > create mode 100644 rust/serde_derive/fragment.rs > create mode 100644 rust/serde_derive/internals/ast.rs > create mode 100644 rust/serde_derive/internals/attr.rs > create mode 100644 rust/serde_derive/internals/case.rs > create mode 100644 rust/serde_derive/internals/check.rs > create mode 100644 rust/serde_derive/internals/ctxt.rs > create mode 100644 rust/serde_derive/internals/mod.rs > create mode 100644 rust/serde_derive/internals/receiver.rs > create mode 100644 rust/serde_derive/internals/respan.rs > create mode 100644 rust/serde_derive/internals/symbol.rs > create mode 100644 rust/serde_derive/lib.rs > create mode 100644 rust/serde_derive/pretend.rs > create mode 100644 rust/serde_derive/ser.rs > create mode 100644 rust/serde_derive/this.rs > create mode 100644 rust/serde_derive/try.rs > create mode 100644 rust/syn/attr.rs > create mode 100644 rust/syn/await.rs > create mode 100644 rust/syn/bigint.rs > create mode 100644 rust/syn/buffer.rs > create mode 100644 rust/syn/custom_keyword.rs > create mode 100644 rust/syn/custom_punctuation.rs > create mode 100644 rust/syn/data.rs > create mode 100644 rust/syn/derive.rs > create mode 100644 rust/syn/discouraged.rs > create mode 100644 rust/syn/error.rs > create mode 100644 rust/syn/export.rs > create mode 100644 rust/syn/expr.rs > create mode 100644 rust/syn/ext.rs > create mode 100644 rust/syn/file.rs > create mode 100644 rust/syn/gen/clone.rs > create mode 100644 rust/syn/gen/debug.rs > create mode 100644 rust/syn/gen/eq.rs > create mode 100644 rust/syn/gen/fold.rs > create mode 100644 rust/syn/gen/hash.rs > create mode 100644 rust/syn/gen/visit.rs > create mode 100644 rust/syn/gen/visit_mut.rs > create mode 100644 rust/syn/gen_helper.rs > create mode 100644 rust/syn/generics.rs > create mode 100644 rust/syn/group.rs > create mode 100644 rust/syn/ident.rs > create mode 100644 rust/syn/item.rs > create mode 100644 rust/syn/lib.rs > create mode 100644 rust/syn/lifetime.rs > create mode 100644 rust/syn/lit.rs > create mode 100644 rust/syn/lookahead.rs > create mode 100644 rust/syn/mac.rs > create mode 100644 rust/syn/macros.rs > create mode 100644 rust/syn/op.rs > create mode 100644 rust/syn/parse.rs > create mode 100644 rust/syn/parse_macro_input.rs > create mode 100644 rust/syn/parse_quote.rs > create mode 100644 rust/syn/pat.rs > create mode 100644 rust/syn/path.rs > create mode 100644 rust/syn/print.rs > create mode 100644 rust/syn/punctuated.rs > create mode 100644 rust/syn/reserved.rs > create mode 100644 rust/syn/sealed.rs > create mode 100644 rust/syn/span.rs > create mode 100644 rust/syn/spanned.rs > create mode 100644 rust/syn/stmt.rs > create mode 100644 rust/syn/thread.rs > create mode 100644 rust/syn/token.rs > create mode 100644 rust/syn/tt.rs > create mode 100644 rust/syn/ty.rs > create mode 100644 rust/syn/verbatim.rs > create mode 100644 rust/syn/whitespace.rs > create mode 100644 samples/rust/local_data_format/de.rs > create mode 100644 samples/rust/local_data_format/error.rs > create mode 100644 samples/rust/local_data_format/ser.rs > create mode 100644 samples/rust/puzzle.rs > create mode 100644 samples/rust/puzzle/error.rs > create mode 100644 samples/rust/puzzle/inode.rs > create mode 100644 samples/rust/puzzle/oci.rs > create mode 100644 samples/rust/puzzle/types.rs > create mode 100644 samples/rust/puzzle/types/cbor_helpers.rs > create mode 100644 samples/rust/puzzlefs.rs > create mode 100644 samples/rust/rust_fs.rs > create mode 100644 samples/rust/rust_serde.rs > > -- > 2.40.1 > [-- Attachment #2: Type: text/html, Size: 61754 bytes --] ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 11:22 ` Ariel Miculas (amiculas) @ 2023-06-09 11:45 ` Christian Brauner 2023-06-09 12:03 ` Ariel Miculas (amiculas) ` (2 more replies) 0 siblings, 3 replies; 28+ messages in thread From: Christian Brauner @ 2023-06-09 11:45 UTC (permalink / raw) To: Ariel Miculas (amiculas); +Cc: linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 09, 2023 at 11:22:12AM +0000, Ariel Miculas (amiculas) wrote: > Hello Christian, > > I didn't send these patches to a wider audience because this is an > initial prototype of the PuzzleFS driver, and it has a few > prerequisites before it could be even considered for merging. First of > all, the rust filesystem abstractions and their dependencies need to > be upstreamed, then there needs to be a discussion regarding the Yes. > inclusion of third-party crates in the linux kernel. > > My plan was to send these patches to the rust-for-linux mailing list and then start a discussion with Miguel Ojeda regarding the upstreaming approach. > There are a lot of new files added in this patch series because I've included all the dependencies required so that my patches could be applied to the rust-next branch, but these dependencies will most likely need to be upstreamed separately. > > It was never my intention to avoid your reviews, should I also send > subsequent patches to linux-fsdevel, even if they're in the early > stages of development? Yeah, I think that would be great. Because the series you sent here touches on a lot of things in terms of infrastructure alone. That work could very well be rather interesting independent of PuzzleFS. We might just want to get enough infrastructure to start porting a tiny existing fs (binderfs or something similar small) to Rust to see how feasible this is and to wet our appetite for bigger changes such as accepting a new filesystem driver completely written in Rust. But aside from the infrastructure discussion: This is yet another filesystem for solving the container image problem in the kernel with the addition of yet another filesystem. We just went through this excercise with another filesystem. So I'd expect some reluctance here. Tbh, the container world keeps sending us filesystems at an alarming rate. That's two within a few months and that leaves a rather disorganized impression. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 11:45 ` Christian Brauner @ 2023-06-09 12:03 ` Ariel Miculas (amiculas) 2023-06-09 12:56 ` Gao Xiang [not found] ` <CANiq72nAcGKBVcVLrfAOkqaKsfftV6D1u97wqNxT38JnNsKp5A@mail.gmail.com> 2023-06-09 12:20 ` Colin Walters 2 siblings, 1 reply; 28+ messages in thread From: Ariel Miculas (amiculas) @ 2023-06-09 12:03 UTC (permalink / raw) To: Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm, Serge Hallyn (shallyn) Adding Serge Hallyn for visibility. Regards, Ariel From: Christian Brauner <brauner@kernel.org> Sent: Friday, June 9, 2023 2:45 PM To: Ariel Miculas (amiculas) <amiculas@cisco.com> Cc: linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>; rust-for-linux@vger.kernel.org <rust-for-linux@vger.kernel.org>; linux-mm@kvack.org <linux-mm@kvack.org> Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver On Fri, Jun 09, 2023 at 11:22:12AM +0000, Ariel Miculas (amiculas) wrote: > Hello Christian, > > I didn't send these patches to a wider audience because this is an > initial prototype of the PuzzleFS driver, and it has a few > prerequisites before it could be even considered for merging. First of > all, the rust filesystem abstractions and their dependencies need to > be upstreamed, then there needs to be a discussion regarding the Yes. > inclusion of third-party crates in the linux kernel. > > My plan was to send these patches to the rust-for-linux mailing list and then start a discussion with Miguel Ojeda regarding the upstreaming approach. > There are a lot of new files added in this patch series because I've included all the dependencies required so that my patches could be applied to the rust-next branch, but these dependencies will most likely need to be upstreamed separately. > > It was never my intention to avoid your reviews, should I also send > subsequent patches to linux-fsdevel, even if they're in the early > stages of development? Yeah, I think that would be great. Because the series you sent here touches on a lot of things in terms of infrastructure alone. That work could very well be rather interesting independent of PuzzleFS. We might just want to get enough infrastructure to start porting a tiny existing fs (binderfs or something similar small) to Rust to see how feasible this is and to wet our appetite for bigger changes such as accepting a new filesystem driver completely written in Rust. But aside from the infrastructure discussion: This is yet another filesystem for solving the container image problem in the kernel with the addition of yet another filesystem. We just went through this excercise with another filesystem. So I'd expect some reluctance here. Tbh, the container world keeps sending us filesystems at an alarming rate. That's two within a few months and that leaves a rather disorganized impression. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 12:03 ` Ariel Miculas (amiculas) @ 2023-06-09 12:56 ` Gao Xiang 0 siblings, 0 replies; 28+ messages in thread From: Gao Xiang @ 2023-06-09 12:56 UTC (permalink / raw) To: Ariel Miculas (amiculas), Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm, Serge Hallyn (shallyn), Colin Walters On 2023/6/9 20:03, Ariel Miculas (amiculas) wrote: ... > > But aside from the infrastructure discussion: > > This is yet another filesystem for solving the container image problem > in the kernel with the addition of yet another filesystem. We just went > through this excercise with another filesystem. So I'd expect some > reluctance here. Tbh, the container world keeps sending us filesystems > at an alarming rate. That's two within a few months and that leaves a > rather disorganized impression. Just a head up. Since Rust kernel infrastructure is too premature, it's impossible to handle page cache / iomap and many useful stuffs. In the long term, at least (someday) after Rust infrastructure is mature, I will implement EROFS ino Rust as a try as well. As for chunk CDC, I don't see it's hard (since we already have some CDC approach since Linux v6.1) but as an effective disk filesystem for performance, EROFS on-disk data is all block-aligned to match storage and page cache alignment. If it's really needed, I could update a more complete (but ineffective and slow) index version to implement unaligned extents (both for decoded and encoded sides). Yet I really think the main purpose of a kernel filesystem is to make full use of kernel infrastructure for performance (like page cache handling) otherwise a FUSE approach is enough. Finally, as for OCI container image stuffs, I'd like to avoid saying this topic anymore on the list (too tired about this). I've seen _three_ in-kernel approaches already before this one and I tend to avoid listing the complete names (including FUSE alternatives) here. I really suggest if you guys could sit down and plan at least a complete OCI standard for the next image format (even you don't want to reuse any exist filesystem for whatever reasons). Thanks, Gao Xiang ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <CANiq72nAcGKBVcVLrfAOkqaKsfftV6D1u97wqNxT38JnNsKp5A@mail.gmail.com>]
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver [not found] ` <CANiq72nAcGKBVcVLrfAOkqaKsfftV6D1u97wqNxT38JnNsKp5A@mail.gmail.com> @ 2023-06-09 12:11 ` Ariel Miculas (amiculas) 2023-06-09 12:21 ` Greg KH 2023-06-09 13:05 ` Alice Ryhl 1 sibling, 1 reply; 28+ messages in thread From: Ariel Miculas (amiculas) @ 2023-06-09 12:11 UTC (permalink / raw) To: Miguel Ojeda, Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm, Alice Ryhl Sorry about that, it seems like I need to switch to plain text mode for every reply in outlook, which is annoying. Regards, Ariel From: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> Sent: Friday, June 9, 2023 3:07 PM To: Christian Brauner <brauner@kernel.org> Cc: Ariel Miculas (amiculas) <amiculas@cisco.com>; linux-fsdevel@vger.kernel.org <linux-fsdevel@vger.kernel.org>; rust-for-linux@vger.kernel.org <rust-for-linux@vger.kernel.org>; linux-mm@kvack.org <linux-mm@kvack.org>; Alice Ryhl <aliceryhl@google.com> Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver On Fri, Jun 9, 2023 at 1:48 PM Christian Brauner <brauner@kernel.org> wrote: > > Because the series you sent here touches on a lot of things in terms of > infrastructure alone. That work could very well be rather interesting > independent of PuzzleFS. We might just want to get enough infrastructure > to start porting a tiny existing fs (binderfs or something similar > small) to Rust to see how feasible this is and to wet our appetite for > bigger changes such as accepting a new filesystem driver completely > written in Rust. That would be great, thanks Christian! (Cc'ing Alice for binderfs -- I think Rust Binder is keeping binderfs in C for the moment, but if you are willing to try things, they are probably interested :) Ariel: sorry, we crossed messages; I didn't receive your message at [1], the rust-for-linux list probably dropped it due to the included HTML. [1] https://lore.kernel.org/linux-mm/CH0PR11MB529981313ED5A1F815350E41CD51A@CH0PR11MB5299.namprd11.prod.outlook.com/ Cheers, Miguel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 12:11 ` Ariel Miculas (amiculas) @ 2023-06-09 12:21 ` Greg KH 0 siblings, 0 replies; 28+ messages in thread From: Greg KH @ 2023-06-09 12:21 UTC (permalink / raw) To: Ariel Miculas (amiculas) Cc: Miguel Ojeda, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm, Alice Ryhl On Fri, Jun 09, 2023 at 12:11:14PM +0000, Ariel Miculas (amiculas) wrote: > Sorry about that, it seems like I need to switch to plain text mode for every reply in outlook, which is annoying. You should also turn off the top-posting mode, as that's not good etiquette on the kernel mailing lists for obvious reasons :) thanks, greg k-h ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver [not found] ` <CANiq72nAcGKBVcVLrfAOkqaKsfftV6D1u97wqNxT38JnNsKp5A@mail.gmail.com> 2023-06-09 12:11 ` Ariel Miculas (amiculas) @ 2023-06-09 13:05 ` Alice Ryhl 1 sibling, 0 replies; 28+ messages in thread From: Alice Ryhl @ 2023-06-09 13:05 UTC (permalink / raw) To: miguel.ojeda.sandonis, brauner Cc: amiculas, linux-fsdevel, linux-mm, rust-for-linux, aliceryhl Miguel Ojeda writes: > That would be great, thanks Christian! (Cc'ing Alice for binderfs -- I > think Rust Binder is keeping binderfs in C for the moment, but if you > are willing to try things, they are probably interested :) Yeah, Rust binder already needs bindings to a lot of other parts of the kernel, so I decided to not rewrite the binderfs part for now to cut down on the number of subsystems I would need to upstream bindings for. Upstreaming bindings has proved to be a lot of work. If someone else wants to upstream the filesystem bindings that binderfs would need, then we can certainly look into using them in Rust binder. Alice ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 11:45 ` Christian Brauner 2023-06-09 12:03 ` Ariel Miculas (amiculas) [not found] ` <CANiq72nAcGKBVcVLrfAOkqaKsfftV6D1u97wqNxT38JnNsKp5A@mail.gmail.com> @ 2023-06-09 12:20 ` Colin Walters 2023-06-09 12:42 ` Christian Brauner 2023-06-09 13:45 ` Ariel Miculas (amiculas) 2 siblings, 2 replies; 28+ messages in thread From: Colin Walters @ 2023-06-09 12:20 UTC (permalink / raw) To: Christian Brauner, Ariel Miculas (amiculas) Cc: linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 9, 2023, at 7:45 AM, Christian Brauner wrote: > > Because the series you sent here touches on a lot of things in terms of > infrastructure alone. That work could very well be rather interesting > independent of PuzzleFS. We might just want to get enough infrastructure > to start porting a tiny existing fs (binderfs or something similar > small) to Rust to see how feasible this is and to wet our appetite for > bigger changes such as accepting a new filesystem driver completely > written in Rust. (Not a kernel developer, but this argument makes sense to me) > But aside from the infrastructure discussion: > > This is yet another filesystem for solving the container image problem > in the kernel with the addition of yet another filesystem. We just went > through this excercise with another filesystem. So I'd expect some > reluctance here. Tbh, the container world keeps sending us filesystems > at an alarming rate. That's two within a few months and that leaves a > rather disorganized impression. I am sure you are aware there's not some "container world" monoculture, there are many organizations, people and companies here with some healthy co-opetition but also some duplication inherent from that. That said at a practical level, Ariel in the https://github.com/containers GH organization we're kind of a "big tent" place. A subset of the organization is very heavily Rust oriented now (certainly the parts I touch) and briefly skimming the puzzlefs code, there are definitely some bits of code we could consider sharing in userspace. Actually though since this isn't releated to the in-kernel discussion I'll file an issue on Github and we can discuss there. But there is definitely a subset of the discussion that Christian is referring to here that is about the intersections/overlap with the composefs approach that is relevant for this list. Maybe we could try to collaborate on an unbiased "puzzlefs vs composefs" document? (What's in https://github.com/anuvu/puzzlefs/tree/master/doc is a bit sparse right now) ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 12:20 ` Colin Walters @ 2023-06-09 12:42 ` Christian Brauner 2023-06-09 17:28 ` Serge Hallyn 2023-06-09 13:45 ` Ariel Miculas (amiculas) 1 sibling, 1 reply; 28+ messages in thread From: Christian Brauner @ 2023-06-09 12:42 UTC (permalink / raw) To: Colin Walters Cc: Ariel Miculas (amiculas), linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 09, 2023 at 08:20:30AM -0400, Colin Walters wrote: > > > On Fri, Jun 9, 2023, at 7:45 AM, Christian Brauner wrote: > > > > Because the series you sent here touches on a lot of things in terms of > > infrastructure alone. That work could very well be rather interesting > > independent of PuzzleFS. We might just want to get enough infrastructure > > to start porting a tiny existing fs (binderfs or something similar > > small) to Rust to see how feasible this is and to wet our appetite for > > bigger changes such as accepting a new filesystem driver completely > > written in Rust. > > (Not a kernel developer, but this argument makes sense to me) > > > But aside from the infrastructure discussion: > > > > This is yet another filesystem for solving the container image problem > > in the kernel with the addition of yet another filesystem. We just went > > through this excercise with another filesystem. So I'd expect some > > reluctance here. Tbh, the container world keeps sending us filesystems > > at an alarming rate. That's two within a few months and that leaves a > > rather disorganized impression. > > I am sure you are aware there's not some "container world" > monoculture, there are many organizations, people and companies here That submission here explicitly references OCI v2. Composefs explicitly advertises 100% compatibility with OCI. So, there's a set of OCI specs including runtime and image. As far as I'm concerned you're all one container world under the OCI umbrella. We're not going to push multiple filesystems into the kernel that all do slightly different things but all serve the OCI container world and use some spec as an argument to move stuff into the kernel. The OCI initiative is hailed as unifying the container ecosystem. Hence, we can expect coordination. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 12:42 ` Christian Brauner @ 2023-06-09 17:28 ` Serge Hallyn 0 siblings, 0 replies; 28+ messages in thread From: Serge Hallyn @ 2023-06-09 17:28 UTC (permalink / raw) To: Christian Brauner Cc: Colin Walters, Ariel Miculas (amiculas), linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 09, 2023 at 02:42:47PM +0200, Christian Brauner wrote: > On Fri, Jun 09, 2023 at 08:20:30AM -0400, Colin Walters wrote: > > > > > > On Fri, Jun 9, 2023, at 7:45 AM, Christian Brauner wrote: > > > > > > Because the series you sent here touches on a lot of things in terms of > > > infrastructure alone. That work could very well be rather interesting > > > independent of PuzzleFS. We might just want to get enough infrastructure > > > to start porting a tiny existing fs (binderfs or something similar > > > small) to Rust to see how feasible this is and to wet our appetite for > > > bigger changes such as accepting a new filesystem driver completely > > > written in Rust. > > > > (Not a kernel developer, but this argument makes sense to me) > > > > > But aside from the infrastructure discussion: > > > > > > This is yet another filesystem for solving the container image problem > > > in the kernel with the addition of yet another filesystem. We just went > > > through this excercise with another filesystem. So I'd expect some > > > reluctance here. Tbh, the container world keeps sending us filesystems > > > at an alarming rate. That's two within a few months and that leaves a > > > rather disorganized impression. > > > > I am sure you are aware there's not some "container world" > > monoculture, there are many organizations, people and companies here > > That submission here explicitly references OCI v2. Composefs explicitly > advertises 100% compatibility with OCI. So, there's a set of OCI specs OCI v2 doesn't currently exist :) There were many design goals for it, and near as I can tell, after everyone discussed those together, everyone went off to work on implementing the bits the needed - which is a right and proper step before coming back and comparing notes about what went well, etc. The two main things where puzzlefs is experimenting are the use of content defined chunking (CDC), and being written in rust (and, especially, to have the same rust code base be used for the in kernel driver, the fuse mounter, the builder, and the userspace extractor). (Well, and reproducible images through a canonical representation, but...) It requires a POC in order to really determine whether the CDC will be worth it, or will have pitfalls. So far, it looks very promising. Adding that functionality to composefs one day could be cool. Likewise, it requires a user in order to push on the infrastructure required to support a full filesystem in rust in the kernel. But that really isn't something we can "add to composefs". :) The main goal of this posting, then, was to show the infrastructure pieces and work on that with the community. We're definitely not (currently :) asking for puzzlefs to be included. However, it is our (business and personal) justification for the rest of the work. > including runtime and image. As far as I'm concerned you're all one > container world under the OCI umbrella. One big happy family! > We're not going to push multiple filesystems into the kernel that all do > slightly different things but all serve the OCI container world and use > some spec as an argument to move stuff into the kernel. > > The OCI initiative is hailed as unifying the container ecosystem. Hence, > we can expect coordination. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 12:20 ` Colin Walters 2023-06-09 12:42 ` Christian Brauner @ 2023-06-09 13:45 ` Ariel Miculas (amiculas) 2023-06-09 17:10 ` Trilok Soni 1 sibling, 1 reply; 28+ messages in thread From: Ariel Miculas (amiculas) @ 2023-06-09 13:45 UTC (permalink / raw) To: Colin Walters, Christian Brauner; +Cc: linux-fsdevel, rust-for-linux, linux-mm A "puzzlefs vs composefs" document sounds like a good idea. The documentation in puzzlefs is a little outdated and could be improved. Feel free to create a github issue and tag me in there. PS: as soon as I figure out how to turn off the top-posting mode, I'll do it. Regards, Ariel ________________________________________ From: Colin Walters <walters@verbum.org> Sent: Friday, June 9, 2023 3:20 PM To: Christian Brauner; Ariel Miculas (amiculas) Cc: linux-fsdevel@vger.kernel.org; rust-for-linux@vger.kernel.org; linux-mm@kvack.org Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver On Fri, Jun 9, 2023, at 7:45 AM, Christian Brauner wrote: > > Because the series you sent here touches on a lot of things in terms of > infrastructure alone. That work could very well be rather interesting > independent of PuzzleFS. We might just want to get enough infrastructure > to start porting a tiny existing fs (binderfs or something similar > small) to Rust to see how feasible this is and to wet our appetite for > bigger changes such as accepting a new filesystem driver completely > written in Rust. (Not a kernel developer, but this argument makes sense to me) > But aside from the infrastructure discussion: > > This is yet another filesystem for solving the container image problem > in the kernel with the addition of yet another filesystem. We just went > through this excercise with another filesystem. So I'd expect some > reluctance here. Tbh, the container world keeps sending us filesystems > at an alarming rate. That's two within a few months and that leaves a > rather disorganized impression. I am sure you are aware there's not some "container world" monoculture, there are many organizations, people and companies here with some healthy co-opetition but also some duplication inherent from that. That said at a practical level, Ariel in the https://github.com/containers GH organization we're kind of a "big tent" place. A subset of the organization is very heavily Rust oriented now (certainly the parts I touch) and briefly skimming the puzzlefs code, there are definitely some bits of code we could consider sharing in userspace. Actually though since this isn't releated to the in-kernel discussion I'll file an issue on Github and we can discuss there. But there is definitely a subset of the discussion that Christian is referring to here that is about the intersections/overlap with the composefs approach that is relevant for this list. Maybe we could try to collaborate on an unbiased "puzzlefs vs composefs" document? (What's in https://github.com/anuvu/puzzlefs/tree/master/doc is a bit sparse right now) ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 13:45 ` Ariel Miculas (amiculas) @ 2023-06-09 17:10 ` Trilok Soni 2023-06-09 17:16 ` Ariel Miculas (amiculas) 0 siblings, 1 reply; 28+ messages in thread From: Trilok Soni @ 2023-06-09 17:10 UTC (permalink / raw) To: Ariel Miculas (amiculas), Colin Walters, Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm On 6/9/2023 6:45 AM, Ariel Miculas (amiculas) wrote: > A "puzzlefs vs composefs" document sounds like a good idea. The documentation in puzzlefs is a little outdated and could be improved. > Feel free to create a github issue and tag me in there. > > PS: as soon as I figure out how to turn off the top-posting mode, I'll do it. > Let me know as well if you could do w/ Outlook :). Switch to other email clients if possible. ---Trilok Soni ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 17:10 ` Trilok Soni @ 2023-06-09 17:16 ` Ariel Miculas (amiculas) 2023-06-09 17:41 ` Miguel Ojeda 2023-06-09 18:43 ` James Bottomley 0 siblings, 2 replies; 28+ messages in thread From: Ariel Miculas (amiculas) @ 2023-06-09 17:16 UTC (permalink / raw) To: Trilok Soni, Colin Walters, Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm I could switch to my personal gmail, but last time Miguel Ojeda asked me to use my cisco email when I send commits signed off by amiculas@cisco.com. If this is not a hard requirement, then I could switch. Regards, Ariel ________________________________________ From: Trilok Soni <quic_tsoni@quicinc.com> Sent: Friday, June 9, 2023 8:10 PM To: Ariel Miculas (amiculas); Colin Walters; Christian Brauner Cc: linux-fsdevel@vger.kernel.org; rust-for-linux@vger.kernel.org; linux-mm@kvack.org Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver On 6/9/2023 6:45 AM, Ariel Miculas (amiculas) wrote: > A "puzzlefs vs composefs" document sounds like a good idea. The documentation in puzzlefs is a little outdated and could be improved. > Feel free to create a github issue and tag me in there. > > PS: as soon as I figure out how to turn off the top-posting mode, I'll do it. > Let me know as well if you could do w/ Outlook :). Switch to other email clients if possible. ---Trilok Soni ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 17:16 ` Ariel Miculas (amiculas) @ 2023-06-09 17:41 ` Miguel Ojeda 2023-06-09 18:49 ` James Bottomley 2023-06-09 18:43 ` James Bottomley 1 sibling, 1 reply; 28+ messages in thread From: Miguel Ojeda @ 2023-06-09 17:41 UTC (permalink / raw) To: Ariel Miculas (amiculas) Cc: Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 9, 2023 at 7:25 PM Ariel Miculas (amiculas) <amiculas@cisco.com> wrote: > > I could switch to my personal gmail, but last time Miguel Ojeda asked me to use my cisco email when I send commits signed off by amiculas@cisco.com. > If this is not a hard requirement, then I could switch. For patches, yeah, that is ideal, so that it matches the Git author / `From:`. But for the other emails, you could use your personal address, if that makes things easier. Hope that helps! Cheers, Miguel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 17:41 ` Miguel Ojeda @ 2023-06-09 18:49 ` James Bottomley 2023-06-09 19:08 ` Miguel Ojeda 2023-06-09 19:11 ` Ariel Miculas 0 siblings, 2 replies; 28+ messages in thread From: James Bottomley @ 2023-06-09 18:49 UTC (permalink / raw) To: Miguel Ojeda, Ariel Miculas (amiculas) Cc: Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm On Fri, 2023-06-09 at 19:41 +0200, Miguel Ojeda wrote: > On Fri, Jun 9, 2023 at 7:25 PM Ariel Miculas (amiculas) > <amiculas@cisco.com> wrote: > > > > I could switch to my personal gmail, but last time Miguel Ojeda > > asked me to use my cisco email when I send commits signed off by > > amiculas@cisco.com. If this is not a hard requirement, then I could > > switch. > > For patches, yeah, that is ideal, so that it matches the Git author / > `From:`. > > But for the other emails, you could use your personal address, if > that makes things easier. It's still not a requirement, though. You can send from your gmail account and still have From: Ariel Miculas <amiculas@cisco.com> As the first line (separated from the commit message by a blank line), which git am (or b4) will pick up as the author email. This behaviour is specifically for people who want the author to be their corporate email address, but have failed to persuade corporate IT to make it possible. Regards, James ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 18:49 ` James Bottomley @ 2023-06-09 19:08 ` Miguel Ojeda 2023-06-09 19:11 ` Ariel Miculas 1 sibling, 0 replies; 28+ messages in thread From: Miguel Ojeda @ 2023-06-09 19:08 UTC (permalink / raw) To: James Bottomley Cc: Ariel Miculas (amiculas), Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 9, 2023 at 8:49 PM James Bottomley <James.Bottomley@hansenpartnership.com> wrote: > > On Fri, 2023-06-09 at 19:41 +0200, Miguel Ojeda wrote: > > For patches, yeah, that is ideal, so that it matches the Git author / > > `From:`. > > It's still not a requirement, though. You can send from your gmail > account and still have Yeah, that is what I said "ideal". When Ariel sent the first patch, he didn't use the `From:` tag within the email body, but attributed it to Cisco, and I had not seen any commit/email from his Cisco address yet, so I asked him if he could use his corporate address. Cheers, Miguel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 18:49 ` James Bottomley 2023-06-09 19:08 ` Miguel Ojeda @ 2023-06-09 19:11 ` Ariel Miculas 2023-06-09 20:01 ` James Bottomley 2023-06-10 9:34 ` Miguel Ojeda 1 sibling, 2 replies; 28+ messages in thread From: Ariel Miculas @ 2023-06-09 19:11 UTC (permalink / raw) To: James Bottomley Cc: Miguel Ojeda, Ariel Miculas (amiculas), Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm Yes, but then how can you be sure that amiculas@cisco.com is the real author of the commit? I think that's why Miguel Ojeda asked me to send them from my business email, otherwise some random gmail account could claim that he is "Ariel Miculas", so he's entitled to sign-off as amiculas@cisco.com. Regards, Ariel On Fri, Jun 9, 2023 at 10:03 PM James Bottomley <James.Bottomley@hansenpartnership.com> wrote: > > On Fri, 2023-06-09 at 19:41 +0200, Miguel Ojeda wrote: > > On Fri, Jun 9, 2023 at 7:25 PM Ariel Miculas (amiculas) > > <amiculas@cisco.com> wrote: > > > > > > I could switch to my personal gmail, but last time Miguel Ojeda > > > asked me to use my cisco email when I send commits signed off by > > > amiculas@cisco.com. If this is not a hard requirement, then I could > > > switch. > > > > For patches, yeah, that is ideal, so that it matches the Git author / > > `From:`. > > > > But for the other emails, you could use your personal address, if > > that makes things easier. > > It's still not a requirement, though. You can send from your gmail > account and still have > > From: Ariel Miculas <amiculas@cisco.com> > > As the first line (separated from the commit message by a blank line), > which git am (or b4) will pick up as the author email. This behaviour > is specifically for people who want the author to be their corporate > email address, but have failed to persuade corporate IT to make it > possible. > > Regards, > > James > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 19:11 ` Ariel Miculas @ 2023-06-09 20:01 ` James Bottomley 2023-06-10 9:34 ` Miguel Ojeda 1 sibling, 0 replies; 28+ messages in thread From: James Bottomley @ 2023-06-09 20:01 UTC (permalink / raw) To: Ariel Miculas Cc: Miguel Ojeda, Ariel Miculas (amiculas), Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm On Fri, 2023-06-09 at 22:11 +0300, Ariel Miculas wrote: > Yes, but then how can you be sure that amiculas@cisco.com is the real > author of the commit? I think that's why Miguel Ojeda asked me to > send them from my business email, otherwise some random gmail account > could claim that he is "Ariel Miculas", so he's entitled to sign-off > as amiculas@cisco.com. Because it's a public list and the real one would observe and repudiate ... The DCO is an attestation which we basically believe absent any proof to the contrary. It's also exhausting and an incredible amount of pointless admin not to believe anything until it's proved, which is why we don't. James ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 19:11 ` Ariel Miculas 2023-06-09 20:01 ` James Bottomley @ 2023-06-10 9:34 ` Miguel Ojeda 1 sibling, 0 replies; 28+ messages in thread From: Miguel Ojeda @ 2023-06-10 9:34 UTC (permalink / raw) To: Ariel Miculas Cc: James Bottomley, Ariel Miculas (amiculas), Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 9, 2023 at 9:11 PM Ariel Miculas <ariel.miculas@gmail.com> wrote: > > Yes, but then how can you be sure that amiculas@cisco.com is the real > author of the commit? I think that's why Miguel Ojeda asked me to send > them from my business email, otherwise some random gmail account could > claim that he is "Ariel Miculas", so he's entitled to sign-off as > amiculas@cisco.com. Yeah, that was the main thing; and by asking that, if you managed to send that original patch from the corporate one, then there was no need for the `From:` to begin with :) Cheers, Miguel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 17:16 ` Ariel Miculas (amiculas) 2023-06-09 17:41 ` Miguel Ojeda @ 2023-06-09 18:43 ` James Bottomley 2023-06-09 18:59 ` Ariel Miculas (amiculas) 1 sibling, 1 reply; 28+ messages in thread From: James Bottomley @ 2023-06-09 18:43 UTC (permalink / raw) To: Ariel Miculas (amiculas), Trilok Soni, Colin Walters, Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm On Fri, 2023-06-09 at 17:16 +0000, Ariel Miculas (amiculas) wrote: > I could switch to my personal gmail, but last time Miguel Ojeda asked > me to use my cisco email when I send commits signed off by > amiculas@cisco.com. > If this is not a hard requirement, then I could switch. For sending patches, you can simply use git-send-email. All you need to point it at is the outgoing email server (which should be a config setting in whatever tool you are using now). We have a (reasonably) up to date document with some recommendations: https://www.kernel.org/doc/html/latest/process/email-clients.html I've successfully used evolution with an exchange server for many years, but the interface isn't to everyone's taste and Mozilla Thunderbird is also known to connect to it. Basic outlook has proven impossible to configure correctly (which is why it doesn't have an entry). Regards, James ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 18:43 ` James Bottomley @ 2023-06-09 18:59 ` Ariel Miculas (amiculas) 2023-06-09 19:20 ` Ariel Miculas 2023-06-09 19:53 ` Alice Ryhl 0 siblings, 2 replies; 28+ messages in thread From: Ariel Miculas (amiculas) @ 2023-06-09 18:59 UTC (permalink / raw) To: James Bottomley, Trilok Soni, Colin Walters, Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm I did use git send-email for sending this patch series, but I cannot find any setting in the Outlook web client for disabling "top posting" when replying to emails: https://answers.microsoft.com/en-us/outlook_com/forum/all/eliminate-top-posting/5e1e5729-30f8-41e9-84cb-fb5e81229c7c Regards, Ariel ________________________________________ From: James Bottomley <James.Bottomley@HansenPartnership.com> Sent: Friday, June 9, 2023 9:43 PM To: Ariel Miculas (amiculas); Trilok Soni; Colin Walters; Christian Brauner Cc: linux-fsdevel@vger.kernel.org; rust-for-linux@vger.kernel.org; linux-mm@kvack.org Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver On Fri, 2023-06-09 at 17:16 +0000, Ariel Miculas (amiculas) wrote: > I could switch to my personal gmail, but last time Miguel Ojeda asked > me to use my cisco email when I send commits signed off by > amiculas@cisco.com. > If this is not a hard requirement, then I could switch. For sending patches, you can simply use git-send-email. All you need to point it at is the outgoing email server (which should be a config setting in whatever tool you are using now). We have a (reasonably) up to date document with some recommendations: https://www.kernel.org/doc/html/latest/process/email-clients.html I've successfully used evolution with an exchange server for many years, but the interface isn't to everyone's taste and Mozilla Thunderbird is also known to connect to it. Basic outlook has proven impossible to configure correctly (which is why it doesn't have an entry). Regards, James ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 18:59 ` Ariel Miculas (amiculas) @ 2023-06-09 19:20 ` Ariel Miculas 2023-06-09 19:45 ` Trilok Soni 2023-06-09 19:53 ` Alice Ryhl 1 sibling, 1 reply; 28+ messages in thread From: Ariel Miculas @ 2023-06-09 19:20 UTC (permalink / raw) To: Ariel Miculas (amiculas) Cc: James Bottomley, Trilok Soni, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm Now if I could figure out how to disable "top posting" in gmail... Regards, Ariel On Fri, Jun 9, 2023 at 10:06 PM Ariel Miculas (amiculas) <amiculas@cisco.com> wrote: > > I did use git send-email for sending this patch series, but I cannot find any setting in the Outlook web client for disabling "top posting" when replying to emails: > https://answers.microsoft.com/en-us/outlook_com/forum/all/eliminate-top-posting/5e1e5729-30f8-41e9-84cb-fb5e81229c7c > > Regards, > Ariel > > ________________________________________ > From: James Bottomley <James.Bottomley@HansenPartnership.com> > Sent: Friday, June 9, 2023 9:43 PM > To: Ariel Miculas (amiculas); Trilok Soni; Colin Walters; Christian Brauner > Cc: linux-fsdevel@vger.kernel.org; rust-for-linux@vger.kernel.org; linux-mm@kvack.org > Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver > > On Fri, 2023-06-09 at 17:16 +0000, Ariel Miculas (amiculas) wrote: > > I could switch to my personal gmail, but last time Miguel Ojeda asked > > me to use my cisco email when I send commits signed off by > > amiculas@cisco.com. > > If this is not a hard requirement, then I could switch. > > For sending patches, you can simply use git-send-email. All you need > to point it at is the outgoing email server (which should be a config > setting in whatever tool you are using now). We have a (reasonably) up > to date document with some recommendations: > > https://www.kernel.org/doc/html/latest/process/email-clients.html > > I've successfully used evolution with an exchange server for many > years, but the interface isn't to everyone's taste and Mozilla > Thunderbird is also known to connect to it. Basic outlook has proven > impossible to configure correctly (which is why it doesn't have an > entry). > > Regards, > > James > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 19:20 ` Ariel Miculas @ 2023-06-09 19:45 ` Trilok Soni 0 siblings, 0 replies; 28+ messages in thread From: Trilok Soni @ 2023-06-09 19:45 UTC (permalink / raw) To: Ariel Miculas, Ariel Miculas (amiculas) Cc: James Bottomley, Colin Walters, Christian Brauner, linux-fsdevel, rust-for-linux, linux-mm On 6/9/2023 12:20 PM, Ariel Miculas wrote: > Now if I could figure out how to disable "top posting" in gmail... > > Regards, > Ariel > > On Fri, Jun 9, 2023 at 10:06 PM Ariel Miculas (amiculas) > <amiculas@cisco.com> wrote: >> >> I did use git send-email for sending this patch series, but I cannot find any setting in the Outlook web client for disabling "top posting" when replying to emails: >> https://answers.microsoft.com/en-us/outlook_com/forum/all/eliminate-top-posting/5e1e5729-30f8-41e9-84cb-fb5e81229c7c >> >> Regards, >> Ariel >> >> ________________________________________ >> From: James Bottomley <James.Bottomley@HansenPartnership.com> >> Sent: Friday, June 9, 2023 9:43 PM >> To: Ariel Miculas (amiculas); Trilok Soni; Colin Walters; Christian Brauner >> Cc: linux-fsdevel@vger.kernel.org; rust-for-linux@vger.kernel.org; linux-mm@kvack.org >> Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver >> >> On Fri, 2023-06-09 at 17:16 +0000, Ariel Miculas (amiculas) wrote: >>> I could switch to my personal gmail, but last time Miguel Ojeda asked >>> me to use my cisco email when I send commits signed off by >>> amiculas@cisco.com. >>> If this is not a hard requirement, then I could switch. >> >> For sending patches, you can simply use git-send-email. All you need >> to point it at is the outgoing email server (which should be a config >> setting in whatever tool you are using now). We have a (reasonably) up >> to date document with some recommendations: >> >> https://www.kernel.org/doc/html/latest/process/email-clients.html >> >> I've successfully used evolution with an exchange server for many >> years, but the interface isn't to everyone's taste and Mozilla >> Thunderbird is also known to connect to it. Basic outlook has proven >> impossible to configure correctly (which is why it doesn't have an >> entry). One of the big reasons why I have quic_tsoni at quicinc dot com (Thunderbird/Mutt/whateveryoulike except Outlook) on top of tsoni at quicinc dot com (Outlook) to make sure that we comply w/ upstream guidelines. Two email IDs are hard to manage but it gives the good separation and freedom. ---Trilok Soni ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 18:59 ` Ariel Miculas (amiculas) 2023-06-09 19:20 ` Ariel Miculas @ 2023-06-09 19:53 ` Alice Ryhl 1 sibling, 0 replies; 28+ messages in thread From: Alice Ryhl @ 2023-06-09 19:53 UTC (permalink / raw) To: Ariel Miculas (amiculas), James Bottomley, Trilok Soni, Colin Walters, Christian Brauner Cc: linux-fsdevel, rust-for-linux, linux-mm On 6/9/23 20:59, Ariel Miculas (amiculas) wrote: > I did use git send-email for sending this patch series, but I cannot find any setting in the Outlook web client for disabling "top posting" when replying to emails: > https://answers.microsoft.com/en-us/outlook_com/forum/all/eliminate-top-posting/5e1e5729-30f8-41e9-84cb-fb5e81229c7c > > Regards, > Ariel You can also use git-send-email for sending replies. Just make a .txt file with this format: Subject: <subject goes here> <your reply after an empty line> The lore.kernel.org site generates the appropriate git-send-email command for sending the reply, so you can copy-paste that to send it. I send most of my replies like that. > From: James Bottomley <James.Bottomley@HansenPartnership.com> > Sent: Friday, June 9, 2023 9:43 PM > To: Ariel Miculas (amiculas); Trilok Soni; Colin Walters; Christian Brauner > Cc: linux-fsdevel@vger.kernel.org; rust-for-linux@vger.kernel.org; linux-mm@kvack.org > Subject: Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver > > On Fri, 2023-06-09 at 17:16 +0000, Ariel Miculas (amiculas) wrote: >> I could switch to my personal gmail, but last time Miguel Ojeda asked >> me to use my cisco email when I send commits signed off by >> amiculas@cisco.com. >> If this is not a hard requirement, then I could switch. > > For sending patches, you can simply use git-send-email. All you need > to point it at is the outgoing email server (which should be a config > setting in whatever tool you are using now). We have a (reasonably) up > to date document with some recommendations: > > https://www.kernel.org/doc/html/latest/process/email-clients.html > > I've successfully used evolution with an exchange server for many > years, but the interface isn't to everyone's taste and Mozilla > Thunderbird is also known to connect to it. Basic outlook has proven > impossible to configure correctly (which is why it doesn't have an > entry). > > Regards, > > James > ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 10:36 ` [RFC PATCH 00/80] Rust PuzzleFS filesystem driver Christian Brauner 2023-06-09 11:22 ` Ariel Miculas (amiculas) @ 2023-06-09 11:42 ` Miguel Ojeda 2023-06-09 23:52 ` Kent Overstreet 2 siblings, 0 replies; 28+ messages in thread From: Miguel Ojeda @ 2023-06-09 11:42 UTC (permalink / raw) To: Christian Brauner; +Cc: Ariel Miculas, linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 9, 2023 at 1:06 PM Christian Brauner <brauner@kernel.org> wrote: > > Any wrappers and code for core fs should be maintained as part of fs. > Rust shouldn't become a way to avoid our reviews once you have a few > wrappers added somewhere. Definitely and, to be clear, we are strict about it (e.g. https://rust-for-linux.com/contributing#the-rust-subsystem). In fact, we appreciate maintainers that are willing to take patches through their tree and take ownership of code too (e.g. KUnit and DRM are doing so already). I imagine Ariel sent the RFC as a way to announce his work early on, especially given how some patches were split, the lack of commit messages and tags, etc. In other cases, we have reviewed patches privately first to iron out this sort of thing, but I wasn't aware of this series coming (I knew Ariel was working on puzzlefs and that he wanted to submit it eventually, but not that an RFC was ready). Also, some of the code here comes from the `rust` branch, but some of it may not be ready yet for upstreaming. Cheers, Miguel ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 10:36 ` [RFC PATCH 00/80] Rust PuzzleFS filesystem driver Christian Brauner 2023-06-09 11:22 ` Ariel Miculas (amiculas) 2023-06-09 11:42 ` Miguel Ojeda @ 2023-06-09 23:52 ` Kent Overstreet 2023-06-10 9:40 ` Miguel Ojeda 2 siblings, 1 reply; 28+ messages in thread From: Kent Overstreet @ 2023-06-09 23:52 UTC (permalink / raw) To: Christian Brauner; +Cc: Ariel Miculas, linux-fsdevel, rust-for-linux, linux-mm On Fri, Jun 09, 2023 at 12:36:29PM +0200, Christian Brauner wrote: > On Fri, Jun 09, 2023 at 09:29:58AM +0300, Ariel Miculas wrote: > > Hi all! > > > > This is a proof of concept driver written for the PuzzleFS > > Uhm, the PuzzleFS filesystem isn't actually sent to fsdevel? Yet I see > tons of patches in there that add wrappers to our core fs data > structures. I even see a ton of new files that all fall clearly into > fsdevel territory: > > create mode 100644 rust/kernel/cred.rs > create mode 100644 rust/kernel/delay.rs > create mode 100644 rust/kernel/driver.rs > create mode 100644 rust/kernel/file.rs > create mode 100644 rust/kernel/fs.rs > create mode 100644 rust/kernel/fs/param.rs > create mode 100644 rust/kernel/io_buffer.rs > create mode 100644 rust/kernel/iov_iter.rs > create mode 100644 rust/kernel/mm.rs > create mode 100644 rust/kernel/mount.rs > create mode 100644 rust/kernel/pages.rs > > There's also quite a lot of new mm/ in there, no? > > Any wrappers and code for core fs should be maintained as part of fs. > Rust shouldn't become a way to avoid our reviews once you have a few > wrappers added somewhere. I'm of the opinion that Rust wrappers should generally live in the same directories as the code they're wrapping. The Rust wrappers are unsafe code that is intimately coupled with the C code they're creating safe interfaces for, and the organizational structure should reflect that. This'll be particularly important when mixing Rust and C in the same module, as I intend to do in bcachefs in the not-too-distant future. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [RFC PATCH 00/80] Rust PuzzleFS filesystem driver 2023-06-09 23:52 ` Kent Overstreet @ 2023-06-10 9:40 ` Miguel Ojeda 0 siblings, 0 replies; 28+ messages in thread From: Miguel Ojeda @ 2023-06-10 9:40 UTC (permalink / raw) To: Kent Overstreet Cc: Christian Brauner, Ariel Miculas, linux-fsdevel, rust-for-linux, linux-mm On Sat, Jun 10, 2023 at 2:12 AM Kent Overstreet <kent.overstreet@linux.dev> wrote: > > I'm of the opinion that Rust wrappers should generally live in the same > directories as the code they're wrapping. The Rust wrappers are unsafe > code that is intimately coupled with the C code they're creating safe > interfaces for, and the organizational structure should reflect that. +1, that is the plan, which also means `MAINTAINERS` does not need extra `F` fields etc. Cheers, Miguel ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2023-06-10 9:41 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20230609063118.24852-1-amiculas@cisco.com>
2023-06-09 10:36 ` [RFC PATCH 00/80] Rust PuzzleFS filesystem driver Christian Brauner
2023-06-09 11:22 ` Ariel Miculas (amiculas)
2023-06-09 11:45 ` Christian Brauner
2023-06-09 12:03 ` Ariel Miculas (amiculas)
2023-06-09 12:56 ` Gao Xiang
[not found] ` <CANiq72nAcGKBVcVLrfAOkqaKsfftV6D1u97wqNxT38JnNsKp5A@mail.gmail.com>
2023-06-09 12:11 ` Ariel Miculas (amiculas)
2023-06-09 12:21 ` Greg KH
2023-06-09 13:05 ` Alice Ryhl
2023-06-09 12:20 ` Colin Walters
2023-06-09 12:42 ` Christian Brauner
2023-06-09 17:28 ` Serge Hallyn
2023-06-09 13:45 ` Ariel Miculas (amiculas)
2023-06-09 17:10 ` Trilok Soni
2023-06-09 17:16 ` Ariel Miculas (amiculas)
2023-06-09 17:41 ` Miguel Ojeda
2023-06-09 18:49 ` James Bottomley
2023-06-09 19:08 ` Miguel Ojeda
2023-06-09 19:11 ` Ariel Miculas
2023-06-09 20:01 ` James Bottomley
2023-06-10 9:34 ` Miguel Ojeda
2023-06-09 18:43 ` James Bottomley
2023-06-09 18:59 ` Ariel Miculas (amiculas)
2023-06-09 19:20 ` Ariel Miculas
2023-06-09 19:45 ` Trilok Soni
2023-06-09 19:53 ` Alice Ryhl
2023-06-09 11:42 ` Miguel Ojeda
2023-06-09 23:52 ` Kent Overstreet
2023-06-10 9:40 ` Miguel Ojeda
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox