Commit 289d088b authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

pd: replace ->special use with private data in the request

Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 61e7712e
...@@ -242,6 +242,11 @@ struct pd_unit { ...@@ -242,6 +242,11 @@ struct pd_unit {
static struct pd_unit pd[PD_UNITS]; static struct pd_unit pd[PD_UNITS];
struct pd_req {
/* for REQ_OP_DRV_IN: */
enum action (*func)(struct pd_unit *disk);
};
static char pd_scratch[512]; /* scratch block buffer */ static char pd_scratch[512]; /* scratch block buffer */
static char *pd_errs[17] = { "ERR", "INDEX", "ECC", "DRQ", "SEEK", "WRERR", static char *pd_errs[17] = { "ERR", "INDEX", "ECC", "DRQ", "SEEK", "WRERR",
...@@ -502,8 +507,9 @@ static enum action do_pd_io_start(void) ...@@ -502,8 +507,9 @@ static enum action do_pd_io_start(void)
static enum action pd_special(void) static enum action pd_special(void)
{ {
enum action (*func)(struct pd_unit *) = pd_req->special; struct pd_req *req = blk_mq_rq_to_pdu(pd_req);
return func(pd_current);
return req->func(pd_current);
} }
static int pd_next_buf(void) static int pd_next_buf(void)
...@@ -767,12 +773,14 @@ static int pd_special_command(struct pd_unit *disk, ...@@ -767,12 +773,14 @@ static int pd_special_command(struct pd_unit *disk,
enum action (*func)(struct pd_unit *disk)) enum action (*func)(struct pd_unit *disk))
{ {
struct request *rq; struct request *rq;
struct pd_req *req;
rq = blk_get_request(disk->gd->queue, REQ_OP_DRV_IN, 0); rq = blk_get_request(disk->gd->queue, REQ_OP_DRV_IN, 0);
if (IS_ERR(rq)) if (IS_ERR(rq))
return PTR_ERR(rq); return PTR_ERR(rq);
req = blk_mq_rq_to_pdu(rq);
rq->special = func; req->func = func;
blk_execute_rq(disk->gd->queue, disk->gd, rq, 0); blk_execute_rq(disk->gd->queue, disk->gd, rq, 0);
blk_put_request(rq); blk_put_request(rq);
return 0; return 0;
...@@ -892,9 +900,21 @@ static void pd_probe_drive(struct pd_unit *disk) ...@@ -892,9 +900,21 @@ static void pd_probe_drive(struct pd_unit *disk)
disk->gd = p; disk->gd = p;
p->private_data = disk; p->private_data = disk;
p->queue = blk_mq_init_sq_queue(&disk->tag_set, &pd_mq_ops, 2, memset(&disk->tag_set, 0, sizeof(disk->tag_set));
BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING); disk->tag_set.ops = &pd_mq_ops;
disk->tag_set.cmd_size = sizeof(struct pd_req);
disk->tag_set.nr_hw_queues = 1;
disk->tag_set.nr_maps = 1;
disk->tag_set.queue_depth = 2;
disk->tag_set.numa_node = NUMA_NO_NODE;
disk->tag_set.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_BLOCKING;
if (blk_mq_alloc_tag_set(&disk->tag_set))
return;
p->queue = blk_mq_init_queue(&disk->tag_set);
if (IS_ERR(p->queue)) { if (IS_ERR(p->queue)) {
blk_mq_free_tag_set(&disk->tag_set);
p->queue = NULL; p->queue = NULL;
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment