rust: file: optimize rust symbol generation for FileDescriptorReservation
PATCH v2 1/1 rust: file: optimize rust symbol generation for FileDescriptorReservation
From: Kunwu Chan <[email protected]>
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$ nm vmlinux | grep ' _R'.*FileDescriptorReservation | rustfilt ... T <kernel::fs::file::FileDescriptorReservation>::fd_install ... T <kernel::fs::file::FileDescriptorReservation>::get_unused_fd_flags ... T <kernel::fs::file::FileDescriptorReservation as core::ops::drop::Drop>::drop
These Rust symbols are trivial wrappers around the C functions fd_install, put_unused_fd and put_task_struct. It doesn't make sense to go through a trivial wrapper for these functions, so mark them inline.
---
Changes in v2:
- Add link and Suggested-by
- Mark 'reserved_fd' as inline
- Reword commit msg
--- rust/kernel/fs/file.rs | 4 ++++ 1 file changed, 4 insertions(+)
rust/kernel/fs/file.rs +4 -0
@@ -392,6 +392,7 @@ pub struct FileDescriptorReservation {impl FileDescriptorReservation {/// Creates a new file descriptor reservation. +#[inline] pub fn get_unused_fd_flags (flags:u32 ) ->Result <Self > {// SAFETY: FFI call, there are no safety requirements on `flags`. let fd:i32 =unsafe { bindings::get_unused_fd_flags (flags) };
@@ -405,6 +406,7 @@ pub fn get_unused_fd_flags(flags: u32) -> Result<Self> { }/// Returns the file descriptor number that was reserved. +#[inline] pub fn reserved_fd (&self) ->u32 { self.fd }
@@ -413,6 +415,7 @@ pub fn reserved_fd(&self) -> u32 {/// /// The previously reserved file descriptor is bound to `file`. This method consumes the /// [`FileDescriptorReservation`], so it will not be usable after this call. +#[inline] pub fn fd_install (self, file:ARef <File >) {// SAFETY: `self.fd` was previously returned by `get_unused_fd_flags`. We have not yet used // the fd, so it is still valid, and `current` still refers to the same task, as this type
@@ -433,6 +436,7 @@ pub fn fd_install(self, file: ARef<File>) { }impl Drop for FileDescriptorReservation { +#[inline] fn drop (&mut self) {// SAFETY: By the type invariants of this type, `self.fd` was previously returned by // `get_unused_fd_flags`. We have not yet used the fd, so it is still valid, and `current`
Signature · 1 line
2.43.0
Adding Christian Brauner who originally merged the rust/kernel/fs/file.rs file.
Quoted 15 lines · Kunwu Chan
From: Kunwu Chan <[email protected]>
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$ nm vmlinux | grep ' _R'.*FileDescriptorReservation | rustfilt ... T <kernel::fs::file::FileDescriptorReservation>::fd_install ... T <kernel::fs::file::FileDescriptorReservation>::get_unused_fd_flags ... T <kernel::fs::file::FileDescriptorReservation as core::ops::drop::Drop>::dropThese Rust symbols are trivial wrappers around the C functions
fd_install,put_unused_fdandput_task_struct. It doesn't make sense to go through a trivial wrapper for these functions, so mark them inline.
Quoted 5 lines
Suggested-by Alice Ryhl <[email protected]>Co-developed-by Grace Deng <[email protected]>Signed-off-by Grace Deng <[email protected]>Signed-off-by Kunwu Chan <[email protected]>
Christian Brauner
maintainerQuoted 19 lines · Alice Ryhl
Adding Christian Brauner who originally merged the
rust/kernel/fs/file.rsfile.Quoted 15 lines · Kunwu Chan
From: Kunwu Chan <[email protected]>
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$ nm vmlinux | grep ' _R'.*FileDescriptorReservation | rustfilt ... T <kernel::fs::file::FileDescriptorReservation>::fd_install ... T <kernel::fs::file::FileDescriptorReservation>::get_unused_fd_flags ... T <kernel::fs::file::FileDescriptorReservation as core::ops::drop::Drop>::dropThese Rust symbols are trivial wrappers around the C functions
fd_install,put_unused_fdandput_task_struct. It doesn't make sense to go through a trivial wrapper for these functions, so mark them inline.
Quoted 7 lines
Quoted 5 lines
Suggested-by Alice Ryhl <[email protected]>Co-developed-by Grace Deng <[email protected]>Signed-off-by Grace Deng <[email protected]>Signed-off-by Kunwu Chan <[email protected]>Reviewed-by Alice Ryhl <[email protected]>
I mentioned various times that anything fs related goes through the VFS tree, I hope that we're all still aware of this agreement.
Quoted 9 lines · Kunwu Chan
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$ nm vmlinux | grep ' _R'.*FileDescriptorReservation | rustfilt ... T <kernel::fs::file::FileDescriptorReservation>::fd_install ... T <kernel::fs::file::FileDescriptorReservation>::get_unused_fd_flags ... T <kernel::fs::file::FileDescriptorReservation as core::ops::drop::Drop>::drop[...]
Applied to the vfs-6.15.rust branch of the vfs/vfs.git tree. Patches in the vfs-6.15.rust branch should appear in linux-next soon.
Please report any outstanding bugs that were missed during review in a new review to the original patch series allowing us to drop it.
It's encouraged to provide Acked-bys and Reviewed-bys even though the patch has now been applied. If possible patch trailers will be updated.
Note that commit hashes shown below are subject to change due to rebase, trailer updates or similar. If in doubt, please check the listed branch.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git branch: vfs-6.15.rust
[1/1] rust: file: optimize rust symbol generation for FileDescriptorReservation
https://git.kernel.org/vfs/vfs/c/e27b0e3c54f0