Boqun Feng <boqun.feng@xxxxxxxxx> writes: > On Wed, Mar 13, 2024 at 12:05:08PM +0100, Andreas Hindborg wrote: >> From: Andreas Hindborg <a.hindborg@xxxxxxxxxxx> >> >> Add initial abstractions for working with blk-mq. >> >> This patch is a maintained, refactored subset of code originally published by >> Wedson Almeida Filho <wedsonaf@xxxxxxxxx> [1]. >> >> [1] https://github.com/wedsonaf/linux/tree/f2cfd2fe0e2ca4e90994f96afe268bbd4382a891/rust/kernel/blk/mq.rs >> >> Cc: Wedson Almeida Filho <wedsonaf@xxxxxxxxx> >> Signed-off-by: Andreas Hindborg <a.hindborg@xxxxxxxxxxx> >> --- >> block/blk-mq.c | 3 +- >> include/linux/blk-mq.h | 1 + >> rust/bindings/bindings_helper.h | 2 + >> rust/helpers.c | 45 ++++ >> rust/kernel/block.rs | 5 + >> rust/kernel/block/mq.rs | 131 +++++++++++ >> rust/kernel/block/mq/gen_disk.rs | 174 +++++++++++++++ >> rust/kernel/block/mq/operations.rs | 346 +++++++++++++++++++++++++++++ >> rust/kernel/block/mq/raw_writer.rs | 60 +++++ >> rust/kernel/block/mq/request.rs | 182 +++++++++++++++ >> rust/kernel/block/mq/tag_set.rs | 117 ++++++++++ >> rust/kernel/error.rs | 5 + >> rust/kernel/lib.rs | 1 + >> 13 files changed, 1071 insertions(+), 1 deletion(-) >> create mode 100644 rust/kernel/block.rs >> create mode 100644 rust/kernel/block/mq.rs >> create mode 100644 rust/kernel/block/mq/gen_disk.rs >> create mode 100644 rust/kernel/block/mq/operations.rs >> create mode 100644 rust/kernel/block/mq/raw_writer.rs >> create mode 100644 rust/kernel/block/mq/request.rs >> create mode 100644 rust/kernel/block/mq/tag_set.rs >> >> diff --git a/block/blk-mq.c b/block/blk-mq.c >> index 2dc01551e27c..a531f664bee7 100644 >> --- a/block/blk-mq.c >> +++ b/block/blk-mq.c >> @@ -702,7 +702,7 @@ static void blk_mq_finish_request(struct request *rq) >> } >> } >> >> -static void __blk_mq_free_request(struct request *rq) >> +void __blk_mq_free_request(struct request *rq) >> { >> struct request_queue *q = rq->q; >> struct blk_mq_ctx *ctx = rq->mq_ctx; >> @@ -722,6 +722,7 @@ static void __blk_mq_free_request(struct request *rq) >> blk_mq_sched_restart(hctx); >> blk_queue_exit(q); >> } >> +EXPORT_SYMBOL_GPL(__blk_mq_free_request); >> > > Note that for an EXPORT_SYMBOL_GPL() symbol, you can just add the > corresponding header file in rust/bindings/bindings_helper.h: > > +#include <linux/blk-mq.h> > > and you will be able to call it from Rust via: > > bindings::__blk_mq_free_request() > > in other words, rust_helper_blk_mq_free_request_internal() is probably > not necessary. Yes, good point. Another option suggested by Miguel is that `__blk_mq_free_request` need not be exported at all. We can make it non-static and then call it from `rust_helper_blk_mq_free_request_internal()`. Then only the latter will be in the kernel image symbol table, which might be better in terms of not exposing `__blk_mq_free_request()` directly. BR Andreas