summaryrefslogtreecommitdiffstats
path: root/src/kernel/mq.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/mq.c')
-rw-r--r--src/kernel/mq.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/kernel/mq.c b/src/kernel/mq.c
new file mode 100644
index 0000000..d402ecf
--- /dev/null
+++ b/src/kernel/mq.c
@@ -0,0 +1,79 @@
+/*
+ * mq.c
+ *
+ * Created on: Jun 26, 2019
+ * Author: fred
+ */
+
+
+#include "mq.h"
+
+#define DNBD3_CMD_REQUEUED 1
+
+
+static int dnbd3_handle_cmd(struct dnbd3_cmd *cmd, int index)
+{
+ struct request *req = blk_mq_rq_from_pdu(cmd);
+ struct dnbd3_device_t *dev = cmd->dnbd3;
+ struct dnbd3_sock *nsock;
+ int ret;
+
+ printk(KERN_DEBUG "dnbd3: handle command %i device %i\n", cmd->cmd_cookie, dev->minor);
+
+
+
+
+ return ret;
+}
+
+static blk_status_t dnbd3_queue_rq(struct blk_mq_hw_ctx *hctx, const struct blk_mq_queue_data *bd)
+{
+ struct dnbd3_cmd *cmd = blk_mq_rq_to_pdu(bd->rq);
+ int ret;
+ struct dnbd3_device_t *dev = cmd->dnbd3;
+
+ printk(KERN_DEBUG "dnbd3: queue request device %i\n", dev->minor);
+
+
+ mutex_lock(&cmd->lock);
+ clear_bit(DNBD3_CMD_REQUEUED, &cmd->flags);
+
+
+ ret = dnbd3_handle_cmd(cmd, hctx->queue_num);
+ if (ret < 0)
+ ret = BLK_STS_IOERR;
+ else if (!ret)
+ ret = BLK_STS_OK;
+ mutex_unlock(&cmd->lock);
+
+ return -10;
+}
+
+static void dnbd3_complete_rq(struct request *req)
+{
+ printk(KERN_DEBUG "dnbd3: dnbd3_complete_rq\n");
+
+}
+
+static int dnbd3_init_request(struct blk_mq_tag_set *set, struct request *rq, unsigned int hctx_idx, unsigned int numa_node)
+{
+ struct dnbd3_cmd *cmd = blk_mq_rq_to_pdu(rq);
+ cmd->dnbd3 = set->driver_data;
+ cmd->flags = 0;
+ mutex_init(&cmd->lock);
+ return 0;
+}
+static enum blk_eh_timer_return dnbd3_xmit_timeout(struct request *req, bool reserved)
+{
+ printk(KERN_DEBUG "dnbd3: dnbd3_xmit_timeout\n");
+ return BLK_EH_DONE;
+}
+
+
+struct blk_mq_ops dnbd3_mq_ops = {
+ .queue_rq = dnbd3_queue_rq,
+ .complete = dnbd3_complete_rq,
+ .init_request = dnbd3_init_request,
+ .timeout = dnbd3_xmit_timeout,
+};
+