Lines Matching refs:pending_req
146 struct pending_req *pending_req);
412 * Retrieve from the 'pending_reqs' a free pending_req structure to be used.
414 static struct pending_req *alloc_req(struct xen_blkif_ring *ring)
416 struct pending_req *req = NULL;
421 req = list_entry(ring->pending_free.next, struct pending_req,
430 * Return the 'pending_req' structure back to the freepool. We also
433 static void free_req(struct xen_blkif_ring *ring, struct pending_req *req)
673 struct pending_req *pending_req = (struct pending_req *)(data->data);
674 struct xen_blkif_ring *ring = pending_req->ring;
682 make_response(ring, pending_req->id,
683 pending_req->operation, pending_req->status);
684 free_req(ring, pending_req);
703 static void xen_blkbk_unmap_and_respond(struct pending_req *req)
824 * so that when we access vaddr(pending_req,i) it has the contents of
902 static int xen_blkbk_map_seg(struct pending_req *pending_req)
906 rc = xen_blkbk_map(pending_req->ring, pending_req->segments,
907 pending_req->nr_segs,
908 (pending_req->operation != BLKIF_OP_READ));
914 struct pending_req *pending_req,
918 struct grant_page **pages = pending_req->indirect_pages;
919 struct xen_blkif_ring *ring = pending_req->ring;
923 nseg = pending_req->nr_segs;
945 pending_req->segments[n]->gref = segments[i].gref;
1012 struct pending_req *pending_req)
1014 free_req(ring, pending_req);
1037 static void __end_block_io_op(struct pending_req *pending_req,
1041 if (pending_req->operation == BLKIF_OP_FLUSH_DISKCACHE &&
1044 xen_blkbk_flush_diskcache(XBT_NIL, pending_req->ring->blkif->be, 0);
1045 pending_req->status = BLKIF_RSP_EOPNOTSUPP;
1046 } else if (pending_req->operation == BLKIF_OP_WRITE_BARRIER &&
1049 xen_blkbk_barrier(XBT_NIL, pending_req->ring->blkif->be, 0);
1050 pending_req->status = BLKIF_RSP_EOPNOTSUPP;
1054 pending_req->status = BLKIF_RSP_ERROR;
1062 if (atomic_dec_and_test(&pending_req->pendcnt))
1063 xen_blkbk_unmap_and_respond(pending_req);
1191 struct pending_req *pending_req;
1218 pending_req = alloc_req(ring);
1219 if (NULL == pending_req) {
1249 if (dispatch_rw_block_io(ring, &req, pending_req))
1253 free_req(ring, pending_req);
1258 if (dispatch_other_io(ring, &req, pending_req))
1292 struct pending_req *pending_req)
1295 struct seg_buf *seg = pending_req->seg;
1298 struct bio **biolist = pending_req->biolist;
1304 struct grant_page **pages = pending_req->segments;
1357 pending_req->ring = ring;
1358 pending_req->id = req->u.rw.id;
1359 pending_req->operation = req_operation;
1360 pending_req->status = BLKIF_RSP_OKAY;
1361 pending_req->nr_segs = nseg;
1380 if (xen_blkbk_parse_indirect(req, pending_req, seg, &preq))
1410 xen_blk_drain_io(pending_req->ring);
1418 if (xen_blkbk_map_seg(pending_req))
1438 bio->bi_private = pending_req;
1453 bio->bi_private = pending_req;
1457 atomic_set(&pending_req->pendcnt, nbio);
1474 xen_blkbk_unmap(ring, pending_req->segments,
1475 pending_req->nr_segs);
1479 free_req(ring, pending_req);