On 06/05/2015 18:37, Max Reitz wrote: > Because qcow2 tries to write beyond the end of the file; the NBD client > implementation passes that on to the server, and the server simply > reports an error (which the NBD client turns into EIO).
Where? qemu_coroutine_yield(); *reply = s->reply; if (reply->handle != request->handle) { reply->error = EIO; } else { if (qiov && reply->error == 0) { ret = qemu_co_recvv(s->sock, qiov->iov, qiov->niov, offset, request->len); if (ret != request->len) { reply->error = EIO; } } /* Tell the read handler to read another header. */ s->reply.handle = 0; } It should get into the "else" and then see reply->error != 0. So the guest should see ENOSPC. >> Can you check if virtio-scsi >> gives ENOSPC? > > In which configuration? Using virtio-scsi on top of qcow2 on top of some > SCSI passthrough block driver? Sounds like we ought to make NBD return > ENOSPC no matter the fate of this series. virtio-scsi on top of qcow2 on top of NBD. No passthrough: "-device scsi-disk" should work. It seems to me that NBD _should_ be getting ENOSPC, unless it's nbd-server that throws away the error. > The problem with only warning for a certain non-default configuration is > that people who don't know what they are doing are more likely to use > the default configuration, so I'd like the warning to appear then. That's entirely true. Perhaps the werror default should be changed from enospc to report after all! Paolo