From 1b92af5534e7b8d2207fbb33e536dc5b35a17d32 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 25 Mar 2026 23:21:36 +0100 Subject: [PATCH] block: raw_async_aio: Use query_device_size() for size queries Use query_device_size() instead of seek(End(0)) and metadata().len() to correctly handle block device and regular file handles. Signed-off-by: Anatol Belski --- block/src/raw_async_aio.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/block/src/raw_async_aio.rs b/block/src/raw_async_aio.rs index c2e6a174e..66f7a667b 100644 --- a/block/src/raw_async_aio.rs +++ b/block/src/raw_async_aio.rs @@ -7,7 +7,6 @@ use std::collections::VecDeque; use std::fs::File; -use std::io::{Seek, SeekFrom}; use std::os::unix::io::{AsRawFd, RawFd}; use libc::{FALLOC_FL_KEEP_SIZE, FALLOC_FL_PUNCH_HOLE, FALLOC_FL_ZERO_RANGE}; @@ -18,7 +17,7 @@ use vmm_sys_util::eventfd::EventFd; use crate::async_io::{ AsyncIo, AsyncIoError, AsyncIoResult, BorrowedDiskFd, DiskFile, DiskFileError, DiskFileResult, }; -use crate::{DiskTopology, SECTOR_SIZE, probe_sparse_support}; +use crate::{DiskTopology, SECTOR_SIZE, probe_sparse_support, query_device_size}; pub struct RawFileDiskAio { file: File, @@ -32,16 +31,15 @@ impl RawFileDiskAio { impl DiskFile for RawFileDiskAio { fn logical_size(&mut self) -> DiskFileResult { - self.file - .seek(SeekFrom::End(0)) - .map_err(DiskFileError::Size) + Ok(query_device_size(&self.file) + .map_err(DiskFileError::Size)? + .0) } fn physical_size(&mut self) -> DiskFileResult { - self.file - .metadata() - .map(|m| m.len()) - .map_err(DiskFileError::Size) + Ok(query_device_size(&self.file) + .map_err(DiskFileError::Size)? + .1) } fn new_async_io(&self, ring_depth: u32) -> DiskFileResult> {