Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
69324fa
block: add mirror module skeleton
Coffeeri Apr 27, 2026
d1c15d5
block: add MirroringAsyncIo skeleton
Coffeeri Apr 27, 2026
c1ef6e0
block: add range lock primitive for mirror
Coffeeri Apr 28, 2026
ff3ee95
block: add CompletionIo for single-fd waits
Coffeeri Apr 29, 2026
00ba1fe
block: mirror mutating I/O to destination
Coffeeri Apr 28, 2026
8d3db3e
block: add background copy worker for mirror
Coffeeri Apr 29, 2026
62fa1c0
virtio-devices: swap disk_image via queue commands
Coffeeri Apr 29, 2026
659fc7b
virtio-devices: set up mirror command channels
Coffeeri Apr 29, 2026
29c4eda
virtio-devices, block: add Block::start_mirror
Coffeeri Apr 30, 2026
c99d234
vmm: add device manager block mirror start and status
Coffeeri Apr 30, 2026
d14343b
vmm: add vm.disk-mirror-start REST endpoint
Coffeeri Apr 30, 2026
bc55b80
vmm: add vm.disk-mirror-status REST endpoint
Coffeeri Apr 30, 2026
fd29c80
block: implement MirroringAsyncIo::submit_batch_requests
Coffeeri Apr 30, 2026
da9d0b1
virtio-devices, block: add Block::complete_mirror
Coffeeri May 3, 2026
7461879
vmm: add vm.disk-mirror-complete REST endpoint
Coffeeri May 3, 2026
04280c8
virtio-devices, block: add Block::cancel_mirror
Coffeeri Jun 10, 2026
7c628fa
vmm: deny conflicting ops while a disk mirror runs
Coffeeri Jun 10, 2026
9e78653
block: use source passthrough after mirror failure
Coffeeri Jul 23, 2026
22c9fc6
vmm: add vm.disk-mirror-cancel REST endpoint
Coffeeri Jun 11, 2026
6883547
block: preserve sparseness in CopyWorker
Coffeeri Jun 17, 2026
c277080
block: add mirror unit tests
Coffeeri Jun 22, 2026
016f0a3
block: test range guard held across mirror write
Coffeeri Jun 23, 2026
d316fc5
virtio-devices, block: reject mirror ops on a paused device
Coffeeri Jun 23, 2026
c237c6a
vmm: reject mirror destination already backing a disk
Coffeeri Jun 24, 2026
ee7ea10
block: test batched submit on partial failure
Coffeeri Jun 24, 2026
f719f69
block: test mirror phase transitions and op fan-out
Coffeeri Jun 24, 2026
8efe174
docs: add disk mirroring guide
Coffeeri Jun 25, 2026
83ddad3
vmm: dedup block device lookup in DeviceManager
Coffeeri Jul 6, 2026
db17488
virtio-devices, vmm: lock mirror destination
Coffeeri Jul 13, 2026
bf0bdbc
block: reject QCOW2 backing chains for mirroring
Coffeeri Jul 20, 2026
55ae7b3
vmm: generalize postponed lifecycle events
Coffeeri Jul 21, 2026
12646b6
vmm: postpone guest lifecycle for disk mirrors
Coffeeri Jul 21, 2026
eaa2671
virtio-devices, block: emit disk mirror events
Coffeeri Aug 12, 2026
b728f99
virtio-devices: drain queues before a mirror switch-over
Coffeeri Sep 23, 2026
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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions block/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ io_uring = ["dep:io-uring"]
bitflags = { workspace = true }
byteorder = { workspace = true }
crc-any = "2.5.0"
event_monitor = { path = "../event_monitor" }
flate2 = "1.1"
io-uring = { version = "0.7.12", optional = true }
libc = { workspace = true }
Expand Down
9 changes: 7 additions & 2 deletions block/src/disk_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
use std::fmt::Debug;

use crate::async_io::{AsyncIo, BorrowedDiskFd};
use crate::{BlockResult, DiskTopology};
use crate::{BlockError, BlockErrorKind, BlockResult, DiskTopology};

/// Reported capacity of a disk image.
pub trait DiskSize: Send + Debug {
Expand Down Expand Up @@ -96,7 +96,12 @@ pub trait Resizable: Send + Debug {
/// Every disk format implements `DiskSize` and `Geometry`.
/// `Sync` is required so that `Arc<dyn DiskFile>` can be shared
/// across threads for concurrent readonly access.
pub trait DiskFile: DiskSize + Geometry + Sync {}
pub trait DiskFile: DiskSize + Geometry + Sync {
/// Returns an error if this disk image cannot participate in block mirroring.
fn supports_mirroring(&self) -> BlockResult<()> {
Err(BlockError::from_kind(BlockErrorKind::UnsupportedFeature))
}
Comment thread
arctic-alpaca marked this conversation as resolved.
}

/// Full capability disk file trait.
///
Expand Down
1 change: 1 addition & 0 deletions block/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pub mod fixed_vhd;
pub mod fixed_vhd_async;
pub mod fixed_vhd_disk;
pub mod fixed_vhd_sync;
pub mod mirror;
pub mod qcow;
#[cfg(feature = "io_uring")]
pub(crate) mod qcow_async;
Expand Down
Loading
Loading