== initial state == D d1 State: up Device /dev/md0s0 Avail: 5/8 MB (74%) D d2 State: up Device /dev/md1s0 Avail: 3/8 MB (49%) V rv State: up Plexes: 1 Size: 4096 kB P rv.p0 R5 State: up Subdisks: 3 Size: 4096 kB S rv.p0.s0 State: up PO: 0 B Size: 2048 kB S rv.p0.s1 State: up PO: 16 kB Size: 2048 kB S rv.p0.s2 State: up PO: 32 kB Size: 2048 kB SANITY: 32KB roundtrip OK ===== [1] DF-4714 scenario A: parity sd DOWN + data sd REBORN, 16KB single write S rv.p0.s0 State: down PO: 0 B Size: 2048 kB S rv.p0.s1 State: reborn PO: 16 kB Size: 2048 kB S rv.p0.s2 State: up PO: 32 kB Size: 2048 kB DF-4714-A: write OK (16KB accepted with parity sd DOWN + data sd REBORN) DF-4714-A RESULT: *** SILENT DATA LOSS (readback 75 != bb) *** trigger_a rc=1 -- physical evidence: parity (d1) region for this stripe: ce ce ce ce ce ce ce ce -- s1 (d2) data region (should still be old zeros - never written): 75 75 75 75 75 75 75 75 ===== [2] DF-4715: two DOWN data sds, 32KB single write -> refusal path -- pre-write states (s0 must be UP): S rv.p0.s0 State: up PO: 0 B Size: 2048 kB S rv.p0.s1 State: down PO: 16 kB Size: 2048 kB S rv.p0.s2 State: down PO: 32 kB Size: 2048 kB 0 bytes transferred in 0.000331 secs (0 bytes/sec) write rc=0 (EIO expected) -- post-write states (buggy: s0 WRONGLY stale; fixed: s0 stays up): S rv.p0.s0 State: stale PO: 0 B Size: 2048 kB S rv.p0.s1 State: obsolete PO: 16 kB Size: 2048 kB S rv.p0.s2 State: obsolete PO: 32 kB Size: 2048 kB ===== [3] control: all sds up, 32KB roundtrip control FAILED ===== [4] DF-4714 scenario B: BOTH data sds REBORN, 32KB single write S rv.p0.s0 State: up PO: 0 B Size: 2048 kB S rv.p0.s1 State: reborn PO: 16 kB Size: 2048 kB S rv.p0.s2 State: reborn PO: 32 kB Size: 2048 kB -- firing trigger (32KB, blocks on s1+s2) - expect panic on buggy kernel: open: Input/output error trigger rc=2 END-BASELINE BASELINE_DONE