On Fri, May 05, 2023 at 01:42:42PM -0600, Keith Busch wrote: > On Fri, May 05, 2023 at 05:24:56AM -0700, Boqun Feng wrote: > > > > The Rust bindings are actually the way of communication between > > subsystem mantainers and Rust driver writers, and can help reduce the > > amount of work: You can have the abstraction the way you like. > > We don't have stable APIs or structures here, so let's be clear-eyed Of course, but every API change need to cover all in-tree users, right? > about the maintenance burden these bindings create for linux-block > contributors. Not a hard "no" from me, but this isn't something to > handwave over. Not tried to handwave over anything ;-) The fact IIUC is simply that Rust drivers can call C function, so say a in-tree Rust driver does something as follow: struct Foo { ptr: *mut bio; // A pointer to bio. ... } impl Foo { pub fn bar(&self) { unsafe { // calling a C function "do_sth_to_bio". // void do_sth_to_bio(struct bio *bio); bindings::do_sth_to_bio(self.ptr); } } } That's an user of the block layer, and that user could exist even without Bio abstraction. And whenever a linux-block developer wants to refactor the "do_sth_to_bio" with a slightly different semantics, that user will need to be taken into consideration, meaning reading the Rust code of Foo to understand the usage. Now with a Bio abstraction, the immediate effect would be there should be no Rust code is allowed to directly calls block layer functions without using Bio abstraction. And hopefully Bio abstraction along with other bindings is a place good enough to reasoning about semanitcs changes or refactoring, so no need to read the code of Foo to understand the usage. Of course, some C side changes may result into changes in Rust bindings as well, but that doesn't make things worse. (Need to understand Foo in that case if there is no Rust bindings). Of course, this is just my 2 cents. I could be completely wrong. (Put the Rust-for-Linux hat on) Needless to say with or without the Rust bindings for the block layer, we are (at least I'm) happy to help on any Rust related questions/bugs/issues for linux-block ;-) Regards, Boqun