From e21031a425e568886b0be8048318ac7ded1616b7 Mon Sep 17 00:00:00 2001 From: Frederic Robra Date: Fri, 5 Jul 2019 15:32:13 +0200 Subject: fixed some errors with multi queue --- src/kernel/mq.c | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) (limited to 'src/kernel/mq.c') diff --git a/src/kernel/mq.c b/src/kernel/mq.c index e3407ab..3b0bde5 100644 --- a/src/kernel/mq.c +++ b/src/kernel/mq.c @@ -11,7 +11,7 @@ #include "block.h" #define DNBD3_CMD_REQUEUED 1 - +// //static void dnbd3_config_put(struct dnbd3_device_t *dev) //{ // if (refcount_dec_and_mutex_lock(&dev->config_refs, @@ -44,21 +44,21 @@ static int dnbd3_send_cmd(struct dnbd3_device_t *dev, struct dnbd3_cmd *cmd, int sigset_t blocked, oldset; void *kaddr; int result; - + dev->pending = req; init_msghdr(msg); dnbd3_request.magic = dnbd3_packet_magic; switch (req_op(req)) { - case REQ_OP_DISCARD: - printk(KERN_DEBUG "dnbd3: request operation discard on device %d\n", dev->minor); - break; - case REQ_OP_FLUSH: - printk(KERN_DEBUG "dnbd3: request operation flush on device %d\n", dev->minor); - break; - case REQ_OP_WRITE: - printk(KERN_DEBUG "dnbd3: request operation write on device %d\n", dev->minor); - break; +// case REQ_OP_DISCARD: +// printk(KERN_DEBUG "dnbd3: request operation discard on device %d\n", dev->minor); +// break; +// case REQ_OP_FLUSH: +// printk(KERN_DEBUG "dnbd3: request operation flush on device %d\n", dev->minor); +// break; +// case REQ_OP_WRITE: +// printk(KERN_DEBUG "dnbd3: request operation write on device %d\n", dev->minor); +// break; case REQ_OP_READ: printk(KERN_DEBUG "dnbd3: request operation read on device %d\n", dev->minor); dnbd3_request.cmd = CMD_GET_BLOCK; @@ -81,7 +81,7 @@ static int dnbd3_send_cmd(struct dnbd3_device_t *dev, struct dnbd3_cmd *cmd, int iov.iov_len = sizeof(dnbd3_request); if (kernel_sendmsg(dev->sock, &msg, &iov, 1, sizeof(dnbd3_request)) != sizeof(dnbd3_request)) { printk(KERN_ERR "dnbd3: connection to server lost\n"); - result = -EAGAIN; + result = -EIO; goto error; } @@ -103,11 +103,6 @@ static int dnbd3_send_cmd(struct dnbd3_device_t *dev, struct dnbd3_cmd *cmd, int result = -EIO; goto error; } -// if (dnbd3_reply.cmd == 0) { -// printk(KERN_ERR "dnbd3: command was 0\n"); -// result = -EIO; -// goto error; -// } if (dnbd3_reply.cmd != CMD_GET_BLOCK) { printk(KERN_ERR "dnbd3: command was %d\n", dnbd3_reply.cmd); @@ -146,8 +141,9 @@ static void dnbd3_requeue_cmd(struct dnbd3_cmd *cmd) { struct request *req = blk_mq_rq_from_pdu(cmd); - if (!test_and_set_bit(DNBD3_CMD_REQUEUED, &cmd->flags)) + if (!test_and_set_bit(DNBD3_CMD_REQUEUED, &cmd->flags)) { blk_mq_requeue_request(req, true); + } } static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index) @@ -222,10 +218,11 @@ static blk_status_t dnbd3_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_ ret = dnbd3_handle_cmd(cmd, hctx->queue_num); - if (ret < 0) + if (ret < 0) { ret = BLK_STS_IOERR; - else if (!ret) + } else if (!ret) { ret = BLK_STS_OK; + } mutex_unlock(&cmd->lock); return ret; -- cgit v1.2.3-55-g7522