nbd: move request validity checking into nbd_send_cmd
authorChristoph Hellwig <hch@lst.de>
Tue, 31 Jan 2017 15:57:28 +0000 (16:57 +0100)
committerJens Axboe <axboe@fb.com>
Tue, 31 Jan 2017 21:00:29 +0000 (14:00 -0700)
This is where we do the rest of the request handling, which will
become much simpler soon, too.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/block/nbd.c

index d4c6281a181c0916afe9a5f38ded4869b798ee94..8bce1c7c18d523e6466e44fcf16887cc15d41acf 100644 (file)
@@ -271,6 +271,9 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
        u32 type;
        u32 tag = blk_mq_unique_tag(req);
 
+       if (req->cmd_type != REQ_TYPE_FS)
+               return -EIO;
+
        if (req_op(req) == REQ_OP_DISCARD)
                type = NBD_CMD_TRIM;
        else if (req_op(req) == REQ_OP_FLUSH)
@@ -280,6 +283,13 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index)
        else
                type = NBD_CMD_READ;
 
+       if (rq_data_dir(req) == WRITE &&
+           (nbd->flags & NBD_FLAG_READ_ONLY)) {
+               dev_err_ratelimited(disk_to_dev(nbd->disk),
+                                   "Write on read-only\n");
+               return -EIO;
+       }
+
        memset(&request, 0, sizeof(request));
        request.magic = htonl(NBD_REQUEST_MAGIC);
        request.type = htonl(type);
@@ -503,17 +513,6 @@ static void nbd_handle_cmd(struct nbd_cmd *cmd, int index)
                goto error_out;
        }
 
-       if (req->cmd_type != REQ_TYPE_FS)
-               goto error_out;
-
-       if (req->cmd_type == REQ_TYPE_FS &&
-           rq_data_dir(req) == WRITE &&
-           (nbd->flags & NBD_FLAG_READ_ONLY)) {
-               dev_err_ratelimited(disk_to_dev(nbd->disk),
-                                   "Write on read-only\n");
-               goto error_out;
-       }
-
        req->errors = 0;
 
        nsock = nbd->socks[index];