blob: d402ecfad234f41f8e23e1ba2c11c0de1453a12f (
plain) (
tree)
|
|
/*
* 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,
};
|