[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/12] nbd/server: Report error for write to read-onl
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PULL 04/12] nbd/server: Report error for write to read-only export |
Date: |
Mon, 30 Oct 2017 21:56:28 +0100 |
When the server is read-only, we were already reporting an error
message for NBD_CMD_WRITE_ZEROES, but failed to set errp for a
similar NBD_CMD_WRITE. This will matter more once structured
replies allow the server to propagate the errp information back
to the client. While at it, use an error message that makes a
bit more sense if viewed on the client side.
Note that when using qemu-io to test qemu-nbd behavior, it is
rather difficult to convince qemu-io to send protocol violations
(such as a read beyond bounds), because we have a lot of active
checking on the client side that a qemu-io request makes sense
before it ever goes over the wire to the server. The case of a
client attempting a write when the server is started as
'qemu-nbd -r' is one of the few places where we can easily test
error path handling, without having to resort to hacking in known
temporary bugs to either the server or client. [Maybe we want a
future patch to the client to do up-front checking on writes to a
read-only export, the way it does up-front bounds checking; but I
don't see anything in the NBD spec that points to a protocol
violation in our current behavior.]
Signed-off-by: Eric Blake <address@hidden>
Reviewed-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Message-Id: <address@hidden>
---
nbd/server.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/nbd/server.c b/nbd/server.c
index efb6003364..05ff7470d5 100644
--- a/nbd/server.c
+++ b/nbd/server.c
@@ -1381,6 +1381,7 @@ static coroutine_fn void nbd_trip(void *opaque)
break;
case NBD_CMD_WRITE:
if (exp->nbdflags & NBD_FLAG_READ_ONLY) {
+ error_setg(&local_err, "Export is read-only");
ret = -EROFS;
break;
}
@@ -1398,7 +1399,7 @@ static coroutine_fn void nbd_trip(void *opaque)
break;
case NBD_CMD_WRITE_ZEROES:
if (exp->nbdflags & NBD_FLAG_READ_ONLY) {
- error_setg(&local_err, "Server is read-only, return error");
+ error_setg(&local_err, "Export is read-only");
ret = -EROFS;
break;
}
--
2.13.6
- [Qemu-devel] [PULL 00/12] NBD patches prior to 2.11 soft freeze, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 01/12] nbd: Include error names in trace messages, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 02/12] nbd: Move nbd_errno_to_system_errno() to public header, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 04/12] nbd/server: Report error for write to read-only export,
Eric Blake <=
- [Qemu-devel] [PULL 03/12] nbd: Expose constants and structs for structured read, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 05/12] nbd/server: Simplify nbd_negotiate_options loop, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 06/12] nbd/server: Refactor zero-length option check, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 07/12] nbd: Minimal structured read for server, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 08/12] nbd/server: Include human-readable message in structured errors, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 09/12] nbd/client: refactor nbd_receive_starttls, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 10/12] nbd/client: prepare nbd_receive_reply for structured reply, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 11/12] nbd: Move nbd_read() to common header, Eric Blake, 2017/10/30
- [Qemu-devel] [PULL 12/12] nbd: Minimal structured read for client, Eric Blake, 2017/10/30
- Re: [Qemu-devel] [PULL 00/12] NBD patches prior to 2.11 soft freeze, Peter Maydell, 2017/10/31