Lines Matching refs:blkif

74 	struct xen_blkif	*blkif;
124 static int do_block_io_op(struct xen_blkif *blkif);
125 static int dispatch_rw_block_io(struct xen_blkif *blkif,
128 static void make_response(struct xen_blkif *blkif, u64 id,
169 static int xen_vbd_translate(struct phys_req *req, struct xen_blkif *blkif,
172 struct xen_vbd *vbd = &blkif->vbd;
195 static void xen_vbd_resize(struct xen_blkif *blkif)
197 struct xen_vbd *vbd = &blkif->vbd;
200 struct xenbus_device *dev = xen_blkbk_xenbus(blkif->be);
204 blkif->domid, MAJOR(vbd->pdevice), MINOR(vbd->pdevice));
243 static void blkif_notify_work(struct xen_blkif *blkif)
245 blkif->waiting_reqs = 1;
246 wake_up(&blkif->wq);
259 static void print_stats(struct xen_blkif *blkif)
263 current->comm, blkif->st_oo_req,
264 blkif->st_rd_req, blkif->st_wr_req,
265 blkif->st_f_req, blkif->st_ds_req);
266 blkif->st_print = jiffies + msecs_to_jiffies(10 * 1000);
267 blkif->st_rd_req = 0;
268 blkif->st_wr_req = 0;
269 blkif->st_oo_req = 0;
270 blkif->st_ds_req = 0;
275 struct xen_blkif *blkif = arg;
276 struct xen_vbd *vbd = &blkif->vbd;
278 xen_blkif_get(blkif);
284 xen_vbd_resize(blkif);
287 blkif->wq,
288 blkif->waiting_reqs || kthread_should_stop());
294 blkif->waiting_reqs = 0;
297 if (do_block_io_op(blkif))
298 blkif->waiting_reqs = 1;
300 if (log_stats && time_after(jiffies, blkif->st_print))
301 print_stats(blkif);
305 print_stats(blkif);
307 blkif->xenblkd = NULL;
308 xen_blkif_put(blkif);
366 pending_req->blkif->domid);
395 static int dispatch_discard_io(struct xen_blkif *blkif,
400 struct block_device *bdev = blkif->vbd.bdev;
403 blkif->st_ds_req++;
405 xen_blkif_get(blkif);
406 secure = (blkif->vbd.discard_secure &&
420 make_response(blkif, req->u.discard.id, req->operation, status);
421 xen_blkif_put(blkif);
425 static void xen_blk_drain_io(struct xen_blkif *blkif)
427 atomic_set(&blkif->drain, 1);
431 if (atomic_read(&blkif->refcnt) <= 2)
434 &blkif->drain_complete, HZ);
436 if (!atomic_read(&blkif->drain))
439 atomic_set(&blkif->drain, 0);
452 xen_blkbk_flush_diskcache(XBT_NIL, pending_req->blkif->be, 0);
457 xen_blkbk_barrier(XBT_NIL, pending_req->blkif->be, 0);
472 make_response(pending_req->blkif, pending_req->id,
474 xen_blkif_put(pending_req->blkif);
475 if (atomic_read(&pending_req->blkif->refcnt) <= 2) {
476 if (atomic_read(&pending_req->blkif->drain))
477 complete(&pending_req->blkif->drain_complete);
500 __do_block_io_op(struct xen_blkif *blkif)
502 union blkif_back_rings *blk_rings = &blkif->blk_rings;
524 blkif->st_oo_req++;
529 switch (blkif->blk_protocol) {
548 if (dispatch_discard_io(blkif, &req))
550 } else if (dispatch_rw_block_io(blkif, &req, pending_req))
561 do_block_io_op(struct xen_blkif *blkif)
563 union blkif_back_rings *blk_rings = &blkif->blk_rings;
567 more_to_do = __do_block_io_op(blkif);
580 static int dispatch_rw_block_io(struct xen_blkif *blkif,
596 blkif->st_rd_req++;
600 blkif->st_wr_req++;
606 blkif->st_f_req++;
630 pending_req->blkif = blkif;
646 if (xen_vbd_translate(&preq, blkif, operation) != 0) {
662 blkif->domid);
671 xen_blk_drain_io(pending_req->blkif);
686 xen_blkif_get(blkif);
739 blkif->st_rd_sect += preq.nr_sects;
741 blkif->st_wr_sect += preq.nr_sects;
749 make_response(blkif, req->u.rw.id, req->operation, BLKIF_RSP_ERROR);
767 static void make_response(struct xen_blkif *blkif, u64 id,
772 union blkif_back_rings *blk_rings = &blkif->blk_rings;
779 spin_lock_irqsave(&blkif->blk_ring_lock, flags);
781 switch (blkif->blk_protocol) {
799 spin_unlock_irqrestore(&blkif->blk_ring_lock, flags);
801 notify_remote_via_irq(blkif->irq);