diff --git a/block_util/src/raw_async.rs b/block_util/src/raw_async.rs index 5fdd8f152..1c47c2f52 100644 --- a/block_util/src/raw_async.rs +++ b/block_util/src/raw_async.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause use crate::async_io::{ - AsyncIo, AsyncIoError, AsyncIoResult, DiskFile, DiskFileError, DiskFileResult, + AsyncIo, AsyncIoError, AsyncIoResult, DiskFile, DiskFileError, DiskFileResult, DiskTopology, }; use io_uring::{opcode, squeue, types, IoUring}; use std::fs::File; @@ -35,6 +35,15 @@ impl DiskFile for RawFileDisk { .map_err(DiskFileError::NewAsyncIo)?, ) as Box) } + + fn topology(&mut self) -> DiskTopology { + if let Ok(topology) = DiskTopology::probe(&mut self.file) { + topology + } else { + warn!("Unable to get device topology. Using default topology"); + DiskTopology::default() + } + } } pub struct RawFileAsync { diff --git a/block_util/src/raw_sync.rs b/block_util/src/raw_sync.rs index e6e090b7d..0fcbdc6a9 100644 --- a/block_util/src/raw_sync.rs +++ b/block_util/src/raw_sync.rs @@ -3,7 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause use crate::async_io::{ - AsyncIo, AsyncIoError, AsyncIoResult, DiskFile, DiskFileError, DiskFileResult, + AsyncIo, AsyncIoError, AsyncIoResult, DiskFile, DiskFileError, DiskFileResult, DiskTopology, }; use std::fs::File; use std::io::{Seek, SeekFrom}; @@ -31,6 +31,15 @@ impl DiskFile for RawFileDiskSync { fn new_async_io(&self, _ring_depth: u32) -> DiskFileResult> { Ok(Box::new(RawFileSync::new(self.file.as_raw_fd())) as Box) } + + fn topology(&mut self) -> DiskTopology { + if let Ok(topology) = DiskTopology::probe(&mut self.file) { + topology + } else { + warn!("Unable to get device topology. Using default topology"); + DiskTopology::default() + } + } } pub struct RawFileSync {