[PATCH] rust: file: optimize rust symbol generation for FileDescriptorReservation
From: Kunwu Chan
Date: Thu Mar 13 2025 - 04:46:35 EST
From: Kunwu Chan <kunwu.chan@xxxxxxxxxxx>
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
ffff8000805b6ef0 T <kernel::fs::file::FileDescriptorReservation>
::fd_install
ffff8000805b6e60 T <kernel::fs::file::FileDescriptorReservation>
::get_unused_fd_flags
ffff8000805b6f08 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.
After doing so, the above symbol will not in output.
Signed-off-by: Kunwu Chan <kunwu.chan@xxxxxxxxxxx>
Co-developed-by: Grace Deng <Grace.Deng006@xxxxxxxxx>
Signed-off-by: Grace Deng <Grace.Deng006@xxxxxxxxx>
---
rust/kernel/fs/file.rs | 3 +++
1 file changed, 3 insertions(+)
diff --git a/rust/kernel/fs/file.rs b/rust/kernel/fs/file.rs
index e03dbe14d62a..3dda2bfca1a6 100644
--- a/rust/kernel/fs/file.rs
+++ b/rust/kernel/fs/file.rs
@@ -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) };
@@ -413,6 +414,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 +435,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`
--
2.43.0