# Short block I/O and device error contract (K1516–K1520) A read request owns one 512-byte destination sector plus one status byte. The virtio used length must be exactly 513, the used head must match, and the status must be zero before a sector may be delivered. A used length of 257 is `ShortRead`; status 1 is `IoError`; status 2 is `Unsupported`. Unknown status is `DeviceFailure`. These errors leave the request and DMA buffer live until the device is reset and QueueReady is observed as zero. The caller's output buffer must retain its previous bytes on all error paths. The VFS-facing read result must expose I/O failure explicitly. No failed or short transfer may be converted into a successful sector, end-of-file, or a zero-filled sector. A later healthy read after reset must still succeed. Local tests cover the full 513-byte success, 257-byte short response, device I/O and unsupported statuses, unchanged ownership on error, reset, and retry. K1520 must bind the same implementation to a guest-visible VFS error path and retain serial/QMP evidence across direct and UEFI profiles.