Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 61e7712e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

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



Makes the code a whole lot easier to read.

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 1bee4243
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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;
+9 −18
Original line number Diff line number Diff line
@@ -822,17 +822,6 @@ rexmit_timer(struct timer_list *timer)
	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);
}

+6 −5
Original line number Diff line number Diff line
@@ -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);
}