summaryrefslogtreecommitdiffstats
path: root/src/kernel/mq.c
diff options
context:
space:
mode:
authorFrederic Robra2019-07-05 15:32:13 +0200
committerFrederic Robra2019-07-05 15:32:13 +0200
commite21031a425e568886b0be8048318ac7ded1616b7 (patch)
tree9f6a0da91c7b81a022048594d63bbbd1b7e5c1d2 /src/kernel/mq.c
parentadded send cmd to read from server (diff)
downloaddnbd3-ng-e21031a425e568886b0be8048318ac7ded1616b7.tar.gz
dnbd3-ng-e21031a425e568886b0be8048318ac7ded1616b7.tar.xz
dnbd3-ng-e21031a425e568886b0be8048318ac7ded1616b7.zip
fixed some errors with multi queue
Diffstat (limited to 'src/kernel/mq.c')
-rw-r--r--src/kernel/mq.c37
1 files changed, 17 insertions, 20 deletions
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;