aoe: replace ->special use with private data in the request
authorChristoph Hellwig <hch@lst.de>
Sat, 10 Nov 2018 08:30:47 +0000 (09:30 +0100)
committerJens Axboe <axboe@kernel.dk>
Sat, 10 Nov 2018 15:03:49 +0000 (08:03 -0700)
Makes the code a whole lot easier to read.

Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/aoe/aoe.h
drivers/block/aoe/aoeblk.c
drivers/block/aoe/aoecmd.c
drivers/block/aoe/aoedev.c

index 7ca76ed..84d0fce 100644 (file)
@@ -100,6 +100,10 @@ enum {
        MAX_TAINT = 1000,       /* cap on aoetgt taint */
 };
 
+struct aoe_req {
+       unsigned long nr_bios;
+};
+
 struct buf {
        ulong nframesout;
        struct bio *bio;
index ed26b72..e2c6aae 100644 (file)
@@ -387,6 +387,7 @@ aoeblk_gdalloc(void *vp)
 
        set = &d->tag_set;
        set->ops = &aoeblk_mq_ops;
+       set->cmd_size = sizeof(struct aoe_req);
        set->nr_hw_queues = 1;
        set->queue_depth = 128;
        set->numa_node = NUMA_NO_NODE;
index bb2fba6..3cf9bc5 100644 (file)
@@ -822,17 +822,6 @@ out:
        spin_unlock_irqrestore(&d->lock, flags);
 }
 
-static unsigned long
-rqbiocnt(struct request *r)
-{
-       struct bio *bio;
-       unsigned long n = 0;
-
-       __rq_for_each_bio(bio, r)
-               n++;
-       return n;
-}
-
 static void
 bufinit(struct buf *buf, struct request *rq, struct bio *bio)
 {
@@ -847,6 +836,7 @@ nextbuf(struct aoedev *d)
 {
        struct request *rq;
        struct request_queue *q;
+       struct aoe_req *req;
        struct buf *buf;
        struct bio *bio;
 
@@ -865,7 +855,11 @@ nextbuf(struct aoedev *d)
                blk_mq_start_request(rq);
                d->ip.rq = rq;
                d->ip.nxbio = rq->bio;
-               rq->special = (void *) rqbiocnt(rq);
+
+               req = blk_mq_rq_to_pdu(rq);
+               req->nr_bios = 0;
+               __rq_for_each_bio(bio, rq)
+                       req->nr_bios++;
        }
        buf = mempool_alloc(d->bufpool, GFP_ATOMIC);
        if (buf == NULL) {
@@ -1069,16 +1063,13 @@ aoe_end_request(struct aoedev *d, struct request *rq, int fastfail)
 static void
 aoe_end_buf(struct aoedev *d, struct buf *buf)
 {
-       struct request *rq;
-       unsigned long n;
+       struct request *rq = buf->rq;
+       struct aoe_req *req = blk_mq_rq_to_pdu(rq);
 
        if (buf == d->ip.buf)
                d->ip.buf = NULL;
-       rq = buf->rq;
        mempool_free(buf, d->bufpool);
-       n = (unsigned long) rq->special;
-       rq->special = (void *) --n;
-       if (n == 0)
+       if (--req->nr_bios == 0)
                aoe_end_request(d, rq, 0);
 }
 
index 9063f8e..5b49f1b 100644 (file)
@@ -160,21 +160,22 @@ static void
 aoe_failip(struct aoedev *d)
 {
        struct request *rq;
+       struct aoe_req *req;
        struct bio *bio;
-       unsigned long n;
 
        aoe_failbuf(d, d->ip.buf);
-
        rq = d->ip.rq;
        if (rq == NULL)
                return;
+
+       req = blk_mq_rq_to_pdu(rq);
        while ((bio = d->ip.nxbio)) {
                bio->bi_status = BLK_STS_IOERR;
                d->ip.nxbio = bio->bi_next;
-               n = (unsigned long) rq->special;
-               rq->special = (void *) --n;
+               req->nr_bios--;
        }
-       if ((unsigned long) rq->special == 0)
+
+       if (!req->nr_bios)
                aoe_end_request(d, rq, 0);
 }