[PATCH v8 0/3] rust: configfs abstractions

Andreas Hindborg posted 3 patches 7 months, 2 weeks ago
MAINTAINERS                     |    2 +
rust/bindings/bindings_helper.h |    1 +
rust/helpers/mutex.c            |    5 +
rust/kernel/configfs.rs         | 1049 +++++++++++++++++++++++++++++++++++++++
rust/kernel/lib.rs              |    2 +
samples/rust/Kconfig            |   11 +
samples/rust/Makefile           |    1 +
samples/rust/rust_configfs.rs   |  192 +++++++
8 files changed, 1263 insertions(+)
[PATCH v8 0/3] rust: configfs abstractions
Posted by Andreas Hindborg 7 months, 2 weeks ago
Add a safe Rust API that allows Rust modules to interface the `configfs`
machinery.

Add an example for the samples folder to demonstrate usage of the API.

Add a maintainer entry for the Rust configfs abstractions in the last patch, to
make it absolutely clear that I will commit to maintain these abstractions, if
required.

The series is a dependency of `rnull`, the Rust null block driver.
Please see [1] for initial `configfs` support in `rnull`.

[1] https://github.com/metaspace/linux/tree/9ac53130f5fb05b9b3074fa261b445b8fde547dd/drivers/block/rnull

Signed-off-by: Andreas Hindborg <a.hindborg@kernel.org>
---
Changes in v8:
- Fix a reasoning error in the safety comment framework for
  `AttributeList::add`.
- Link to v7: https://lore.kernel.org/r/20250505-configfs-v7-0-8bcf47c1fb88@kernel.org

Changes in v7:
- Update documentation: Consistently apply code spans, add inter-doc
  links, fix typos and improve indentation.
- Use a const block to verify attribute index.
- Link to v6: https://lore.kernel.org/r/20250501-configfs-v6-0-66c61eb76368@kernel.org

Changes in v6:
- Use `&raw const` and `&raw mut` instead of `addr_of!` and
  `addr_of_mut!` macros.
- Drop use of `ForeignOwnable`.
- Link to v5: https://lore.kernel.org/r/20250227-configfs-v5-0-c40e8dc3b9cd@kernel.org

Changes in v5:
- Remove `as _` casts.
- Document `ID` type parameter of `AttributeOperations`.
- Add documentation at macro call sites in example.
- Add example expansion of `configfs_attrs!`.
- Move trait bound in `AttributeList::add`
- Improve safety requirement for `AttributeList::new`.
- Fix a copy/paste error in print in sample.
- Clarify use of `{}` for empty struct in sample.
- Improve documentation for `AttributeList`.
- Remove `kernel::` prefix from `container_of!` invocation.
- Reword safety comment in `get_group_data`.
- Correct commit message in relation to unstable feature additions.
- Use imperative language in commit messages.
- Consistently capitalize the word "Rust" in commit messages.
- Explain that "drop" in `GroupOperations::drop_item` is not related to Rust
  drop.
- Link to v4: https://lore.kernel.org/r/20250224-configfs-v4-0-9af9b5e611f6@kernel.org

Changes in v4:
- Fix a build issue by depending on v18 of "rust: types: add `ForeignOwnable::PointedTo`"
- Link to v3: https://lore.kernel.org/r/20250218-configfs-v3-0-0e40c0778187@kernel.org

Changes in v3:
- Allow trailing commas in invocation of `configfs_attrs!`.
- Use a more suitable C initialization function when initializing `Subsystem`.
- Split sample into separate patch.
- Add an inline example.

The remaining changes in this version are style fixes, documentation
improvements and typo fixes. They are enumerated below:
- Consolidate `paste` macro calls.
- Do not hard code page size in example.
- Remove prefix of `c_str!` in sample.
- Use a more descriptive variable name in `into_foreign`.
- Improve code formatting in macros invocations.
- Add comment related to null terminator in `configfs_attrs!`
- Move attributes below docstrings.
- Remove a rogue todo.
- Remove trait bound from struct definition `GroupOperationsVTable`.
- Remove `as _` casts.
- Remove `GroupOprations::Parent` associated type.
- General documentation improvements.
- Explicitly use `ArcBorrow` for `drop_item` parameter type.
- Add a comment describing expansion to a call to `Attribute::add`.
- Add a comment explaining bound check in `Attribute::add`.
- Link to v2: https://lore.kernel.org/r/20250207-configfs-v2-0-f7a60b24d38e@kernel.org

Changes in v2:
- Remove generalization over pointer type and enforce use of `Arc`.
- Use type system to enforce connection between `ItemType` and
  `Subsystem` or `Group`. Differentiate construction of vtables on this
  type difference.
- Move drop logic of child nodes from parent to child.
- Pick `ForeignOwnable::PointedTo` patch as dependency instead of
  including it here.
- Fix some rustdoc warnings.
- Use CamelCase for generic type parameter declaration.
- Destroy mutex in `Subsystem::drop`.
- Move `GroupOperationsVTable` struct definition next to implementation.
- Rebase on v6.14-rc1.
- Link to v1: https://lore.kernel.org/r/20250131-configfs-v1-0-87947611401c@kernel.org

---
Andreas Hindborg (3):
      rust: configfs: introduce rust support for configfs
      rust: configfs: add a sample demonstrating configfs usage
      MAINTAINERS: add configfs Rust abstractions

 MAINTAINERS                     |    2 +
 rust/bindings/bindings_helper.h |    1 +
 rust/helpers/mutex.c            |    5 +
 rust/kernel/configfs.rs         | 1049 +++++++++++++++++++++++++++++++++++++++
 rust/kernel/lib.rs              |    2 +
 samples/rust/Kconfig            |   11 +
 samples/rust/Makefile           |    1 +
 samples/rust/rust_configfs.rs   |  192 +++++++
 8 files changed, 1263 insertions(+)
---
base-commit: b4432656b36e5cc1d50a1f2dc15357543add530e
change-id: 20250131-configfs-b888cd82d84a

Best regards,
-- 
Andreas Hindborg <a.hindborg@kernel.org>
Re: [PATCH v8 0/3] rust: configfs abstractions
Posted by Andreas Hindborg 7 months, 1 week ago
On Thu, 08 May 2025 10:52:08 +0200, Andreas Hindborg wrote:
> Add a safe Rust API that allows Rust modules to interface the `configfs`
> machinery.
> 
> Add an example for the samples folder to demonstrate usage of the API.
> 
> Add a maintainer entry for the Rust configfs abstractions in the last patch, to
> make it absolutely clear that I will commit to maintain these abstractions, if
> required.
> 
> [...]

Applied, thanks!

[1/3] rust: configfs: introduce rust support for configfs
      commit: 446cafc295bfc0e89da94a482fe8290bd8b429fb
[2/3] rust: configfs: add a sample demonstrating configfs usage
      commit: 1bfb105051566ec5cc7c4f693362420b37a68781
[3/3] MAINTAINERS: add configfs Rust abstractions
      commit: c6b1908224593db76f77b904894cd51933559ae9

Best regards,
-- 
Andreas Hindborg <a.hindborg@kernel.org>