Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09fc54cc authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

nbd: move request validity checking into nbd_send_cmd



This is where we do the rest of the request handling, which will
become much simpler soon, too.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 27410a89
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -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];