On 12/27/2016 08:09 AM, Vladimir Sementsov-Ogievskiy wrote: > A bit out of topic, but... > >> structured replies via `NBD_OPT_STRUCTURED_REPLY`. Conversely, if >> structured replies are negotiated, the server MUST use a >> structured reply for any response with a payload, and MUST NOT use >> a simple reply for `NBD_CMD_READ` (even for the case of an early >> `EINVAL` due to bad flags), but MAY use either a simple reply or a >> structured reply to all other requests. > > What was the reason for it? Why not to negotiate forced structured read > separately?
Because the whole reason we (want to) introduce structured replies IS to fix the inability to do a partial read or an efficient read of zeroes. The fact that structured reads make other extensions possible is icing on the cake, but if you are going to implement structured replies at all, you might as well make reads do it (since reads are mandatory, while all other commands that utilize structured replies are optional). > Actually, this spec forces any server, which wants to > implement structured reply implement structured read too. But what if it > don't want to? If it only wants to implement BLOCK_STATUS? We intentionally do not want to permit such a server. Any server that wants to implement BLOCK_STATUS must also implement structured reads. > > So, what about changing it, to allow BLOCK_STATUS (or other future > structured replies) without structured read? Structured read is good > only for sparse formats, Not true - it is also good for error recovery even on non-sparse exports. The existing read command is flawed in that it cannot be implemented with partial read support - once the server has started sending data, it MUST finish sending the number of bytes requested by the client, which means the server MUST either buffer the read up front (to ensure no read error is possible once the data sending is started), or MUST disconnect if a read error is detected partway through. With structured reads, you can implement much more efficient servers that start sending the reply right away without buffering, but which can still error out on a read error partway through. > when BLOCK_STATUS is more global. I understand, > that servers may implement simple (and useless) one-chunk structured > read, but I think that it is better to fix the spec, to not provoke > servers use such workaround. To date, we don't know of ANY servers that implement structured replies at all, whether for structured reads or for BLOCK_STATUS. I'm working on qemu patches to make qemu implement both, and it will serve as an example of how easy or hard it is to implement things. But I see NO reason to weaken the spec to allow structured BLOCK_STATUS without structured reads. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature