From 290f57a6e3aaf470a75a95ebd4f67947b7b406bd Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 25 Mar 2026 23:21:18 +0100 Subject: [PATCH] block: raw_sync: 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_sync.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/block/src/raw_sync.rs b/block/src/raw_sync.rs index b9f89dde0..c045c5942 100644 --- a/block/src/raw_sync.rs +++ b/block/src/raw_sync.rs @@ -4,7 +4,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}; @@ -14,7 +13,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 RawFileDiskSync { file: File, @@ -28,16 +27,15 @@ impl RawFileDiskSync { impl DiskFile for RawFileDiskSync { 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> {