Loading drivers/block/aoe/aoe.h +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading drivers/block/aoe/aoeblk.c +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading drivers/block/aoe/aoecmd.c +9 −18 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; Loading @@ -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) { Loading Loading @@ -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); } Loading drivers/block/aoe/aoedev.c +6 −5 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading
drivers/block/aoe/aoe.h +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
drivers/block/aoe/aoeblk.c +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
drivers/block/aoe/aoecmd.c +9 −18 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; Loading @@ -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) { Loading Loading @@ -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); } Loading
drivers/block/aoe/aoedev.c +6 −5 Original line number Diff line number Diff line Loading @@ -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); } Loading