Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions nix/pkgs/libspdk/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ let
# Derivation attributes
#
spdk = rec {
rev = "f61f929aac373ed8af3a27a4bafa4cee046e1922";
sha256 = "sha256-k+jezN1lGteu9AN7qozVyaTmtuYC7dgNRPDpSSYt2l8=";
rev = "1999ff22d5d32711755baa9ad190261b92a4e08b";
sha256 = "sha256-CqbgQ/jlu2MUhVxvpwjWdiW29YdT3yU9cWS6lG8OWZ0=";
pname = "libspdk${nameSuffix}";
version = "25.05-${lib.substring 0 7 rev}";
name = "${pname}-${version}";
Expand Down
24 changes: 20 additions & 4 deletions src/bdev_async.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,30 @@ use crate::{
ffihelper::{cb_arg, done_errno_cb, errno_error, errno_result_from_i32, ErrnoResult},
libspdk::{
bdev_reset_device_stat, spdk_bdev, spdk_bdev_get_device_stat, spdk_bdev_io_stat,
spdk_bdev_unregister, SPDK_BDEV_RESET_STAT_ALL, SPDK_BDEV_RESET_STAT_NONE,
spdk_bdev_unregister,
},
Bdev, BdevOps,
};

/// TODO
pub type BdevStats = spdk_bdev_io_stat;

/// Bdev Stat reset mode.
pub enum BdevStatsResetMode {
All,
MaxMin,
Errors,
}
impl From<BdevStatsResetMode> for crate::libspdk::spdk_bdev_reset_stat_mode {
fn from(value: BdevStatsResetMode) -> Self {
match value {
BdevStatsResetMode::All => crate::libspdk::SPDK_BDEV_RESET_STAT_ALL,
BdevStatsResetMode::MaxMin => crate::libspdk::SPDK_BDEV_RESET_STAT_MAXMIN,
BdevStatsResetMode::Errors => crate::libspdk::SPDK_BDEV_RESET_STAT_ERROR,
}
}
}

/// TODO
pub struct BdevAsyncCallContext {
/// TODO
Expand Down Expand Up @@ -86,7 +102,7 @@ where
spdk_bdev_get_device_stat(
self.as_inner_ptr(),
&mut stat as *mut _,
SPDK_BDEV_RESET_STAT_NONE,
crate::libspdk::SPDK_BDEV_RESET_STAT_NONE,
Some(inner_stats_callback),
cb_arg(s),
);
Expand All @@ -98,14 +114,14 @@ where

/// This function resets all stat counters for a given Bdev.
/// Returns Errno in case of an error.
pub async fn stats_reset_async(&self) -> ErrnoResult<()> {
pub async fn stats_reset_async(&self, reset_mode: BdevStatsResetMode) -> ErrnoResult<()> {
let (s, r) = oneshot::channel::<i32>();
// This will iterate over I/O channels to reset IOStats and call async
// callback when done.
unsafe {
bdev_reset_device_stat(
self.as_inner_ptr(),
SPDK_BDEV_RESET_STAT_ALL,
reset_mode.into(),
Some(inner_stats_reset_callback),
cb_arg(s),
);
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ mod uuid;

pub use crate::{
bdev::Bdev,
bdev_async::{BdevAsyncCallContext, BdevStats},
bdev_async::{BdevAsyncCallContext, BdevStats, BdevStatsResetMode},
bdev_builder::BdevBuilder,
bdev_desc::{BdevDesc, BdevDescError, BdevEvent, LbaRange, LbaRangeLock},
bdev_io::BdevIo,
Expand Down