From 3b0d278ba36fda47ebd73e44c8939d1f2939389f Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Tue, 7 Dec 2021 16:42:53 +0000 Subject: [PATCH] block_util: Implement DiskFile::topology() for raw file types Signed-off-by: Rob Bradford --- block_util/src/raw_async.rs | 11 ++++++++++- block_util/src/raw_sync.rs | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) 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 {