Eric Blake 1104d83c72 nbd-client: Refuse read-only client with BDRV_O_RDWR
The NBD spec says that clients should not try to write/trim to
an export advertised as read-only by the server.  But we failed
to check that, and would allow the block layer to use NBD with
BDRV_O_RDWR even when the server is read-only, which meant we
were depending on the server sending a proper EPERM failure for
various commands, and also exposes a leaky abstraction: using
qemu-io in read-write mode would succeed on 'w -z 0 0' because
of local short-circuiting logic, but 'w 0 0' would send a
request over the wire (where it then depends on the server, and
fails at least for qemu-nbd but might pass for other NBD
implementations).

With this patch, a client MUST request read-only mode to access
a server that is doing a read-only export, or else it will get
a message like:

can't open device nbd://localhost:10809/foo: request for write access conflicts with read-only export

It is no longer possible to even attempt writes over the wire
(including the corner case of 0-length writes), because the block
layer enforces the explicit read-only request; this matches the
behavior of qcow2 when backed by a read-only POSIX file.

Fix several iotests to comply with the new behavior (since
qemu-nbd of an internal snapshot, as well as nbd-server-add over QMP,
default to a read-only export, we must tell blockdev-add/qemu-io to
set up a read-only client).

CC: qemu-stable@nongnu.org
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20171108215703.9295-3-eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
2017-11-09 10:10:17 -06:00
..
2017-09-22 10:46:25 +08:00
2017-10-11 15:15:17 -03:00
2017-10-16 20:57:06 +03:00
2016-10-26 08:29:01 -07:00
2017-06-20 14:31:31 +02:00
2017-03-01 11:51:28 +04:00
2017-03-01 11:51:28 +04:00
2017-03-01 11:51:05 +04:00
2017-03-01 11:51:04 +04:00
2017-03-01 11:51:28 +04:00
2017-08-10 14:33:43 +01:00
2017-10-20 13:32:10 +02:00
2017-03-01 11:51:05 +04:00
2017-10-20 13:32:10 +02:00
2017-10-20 13:32:10 +02:00
2017-10-20 13:32:10 +02:00
2017-09-15 09:05:19 +02:00
2017-03-01 00:09:28 +04:00
2017-03-01 00:09:28 +04:00
2017-10-20 13:32:10 +02:00
2017-01-10 08:49:59 -08:00
2017-07-14 11:04:34 +02:00
2017-09-05 22:34:40 +02:00
2016-11-11 20:53:23 +08:00
2017-03-01 11:51:29 +04:00
2017-10-20 13:32:10 +02:00