rust/kernel/block/mq/gen_disk.rs

Source file repositories/reference/linux-study-clean/rust/kernel/block/mq/gen_disk.rs

File Facts

System
Linux kernel
Corpus path
rust/kernel/block/mq/gen_disk.rs
Extension
.rs
Size
8874 bytes
Lines
242
Domain
Rust Kernel Layer
Bucket
Rust API Membrane
Inferred role
Rust Kernel Layer: implementation source
Status
source implementation candidate

Why This File Exists

Rust-side wrappers and abstractions around kernel C APIs, ownership contracts, allocation, synchronization, and module integration.

Dependency Surface

Detected Declarations

Annotated Snippet

fn drop(&mut self) {
        // SAFETY: By type invariant of `Self`, `self.gendisk` points to a valid
        // and initialized instance of `struct gendisk`, and, `queuedata` was
        // initialized with the result of a call to
        // `ForeignOwnable::into_foreign`.
        let queue_data = unsafe { (*(*self.gendisk).queue).queuedata };

        // SAFETY: By type invariant, `self.gendisk` points to a valid and
        // initialized instance of `struct gendisk`, and it was previously added
        // to the VFS.
        unsafe { bindings::del_gendisk(self.gendisk) };

        // SAFETY: By type invariant, `self.gendisk` was added to the VFS, so
        // `put_disk()` must follow `del_gendisk()` to drop the final gendisk
        // reference and trigger the remaining release path.
        unsafe { bindings::put_disk(self.gendisk) };

        // SAFETY: `queue.queuedata` was created by `GenDiskBuilder::build` with
        // a call to `ForeignOwnable::into_foreign` to create `queuedata`.
        // `ForeignOwnable::from_foreign` is only called here.
        drop(unsafe { T::QueueData::from_foreign(queue_data) });
    }
}

Annotation

Implementation Notes