nbd: zero from and len fields in NBD_CMD_DISCONNECT.
authorHani Benhabiles <kroosec@gmail.com>
Fri, 6 Jun 2014 21:38:30 +0000 (14:38 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Jun 2014 23:08:18 +0000 (16:08 -0700)
Len field is already set to zero, but not the from field which is sent
as 0xfffffffffffffe00.  This makes no sense, and may cause confuse
server implementations doing sanity checks (qemu-nbd is an example.)

Signed-off-by: Hani Benhabiles <hani@linux.com>
Cc: Paul Clements <paul.clements@us.sios.com>
Cc: Paul Clements <Paul.Clements@steeleye.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/block/nbd.c

index 56a027d6115e0f5fa83c48070ff26ca6d0ba061e..fb31b8ee4372323a4a93eddb0aa9141ea97d1021 100644 (file)
@@ -243,14 +243,11 @@ static int nbd_send_req(struct nbd_device *nbd, struct request *req)
        struct nbd_request request;
        unsigned long size = blk_rq_bytes(req);
 
+       memset(&request, 0, sizeof(request));
        request.magic = htonl(NBD_REQUEST_MAGIC);
        request.type = htonl(nbd_cmd(req));
 
-       if (nbd_cmd(req) == NBD_CMD_FLUSH) {
-               /* Other values are reserved for FLUSH requests.  */
-               request.from = 0;
-               request.len = 0;
-       } else {
+       if (nbd_cmd(req) != NBD_CMD_FLUSH && nbd_cmd(req) != NBD_CMD_DISC) {
                request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9);
                request.len = htonl(size);
        }