Lines Matching refs:be
47 struct xenbus_device *xen_blkbk_xenbus(struct backend_info *be) in xen_blkbk_xenbus() argument
49 return be->dev; in xen_blkbk_xenbus()
67 struct xenbus_device *dev = blkif->be->dev; in blkback_name()
95 if (blkif->be->dev->state == XenbusStateConnected) in xen_update_blkif_status()
99 connect(blkif->be); in xen_update_blkif_status()
100 if (blkif->be->dev->state != XenbusStateConnected) in xen_update_blkif_status()
105 xenbus_dev_error(blkif->be->dev, err, "get blkback dev name"); in xen_update_blkif_status()
111 xenbus_dev_error(blkif->be->dev, err, "block flush"); in xen_update_blkif_status()
120 xenbus_dev_error(blkif->be->dev, err, "start xenblkd"); in xen_update_blkif_status()
169 err = xenbus_map_ring_valloc(blkif->be->dev, gref, nr_grefs, in xen_blkif_map()
206 xenbus_unmap_ring_vfree(blkif->be->dev, blkif->blk_ring); in xen_blkif_map()
239 xenbus_unmap_ring_vfree(blkif->be->dev, blkif->blk_ring); in xen_blkif_disconnect()
270 kfree(blkif->be->mode); in xen_blkif_free()
271 kfree(blkif->be); in xen_blkif_free()
305 struct backend_info *be = dev_get_drvdata(&dev->dev); \
311 VBD_SHOW(oo_req, "%llu\n", be->blkif->st_oo_req);
312 VBD_SHOW(rd_req, "%llu\n", be->blkif->st_rd_req);
313 VBD_SHOW(wr_req, "%llu\n", be->blkif->st_wr_req);
314 VBD_SHOW(f_req, "%llu\n", be->blkif->st_f_req);
315 VBD_SHOW(ds_req, "%llu\n", be->blkif->st_ds_req);
316 VBD_SHOW(rd_sect, "%llu\n", be->blkif->st_rd_sect);
317 VBD_SHOW(wr_sect, "%llu\n", be->blkif->st_wr_sect);
335 VBD_SHOW(physical_device, "%x:%x\n", be->major, be->minor);
336 VBD_SHOW(mode, "%s\n", be->mode);
428 struct backend_info *be = dev_get_drvdata(&dev->dev); in xen_blkbk_remove() local
432 if (be->major || be->minor) in xen_blkbk_remove()
435 if (be->backend_watch.node) { in xen_blkbk_remove()
436 unregister_xenbus_watch(&be->backend_watch); in xen_blkbk_remove()
437 kfree(be->backend_watch.node); in xen_blkbk_remove()
438 be->backend_watch.node = NULL; in xen_blkbk_remove()
443 if (be->blkif) { in xen_blkbk_remove()
444 xen_blkif_disconnect(be->blkif); in xen_blkbk_remove()
445 xen_blkif_put(be->blkif); in xen_blkbk_remove()
452 struct backend_info *be, int state) in xen_blkbk_flush_diskcache() argument
454 struct xenbus_device *dev = be->dev; in xen_blkbk_flush_diskcache()
465 static void xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info *be) in xen_blkbk_discard() argument
467 struct xenbus_device *dev = be->dev; in xen_blkbk_discard()
468 struct xen_blkif *blkif = be->blkif; in xen_blkbk_discard()
471 struct block_device *bdev = be->blkif->vbd.bdev; in xen_blkbk_discard()
510 struct backend_info *be, int state) in xen_blkbk_barrier() argument
512 struct xenbus_device *dev = be->dev; in xen_blkbk_barrier()
532 struct backend_info *be = kzalloc(sizeof(struct backend_info), in xen_blkbk_probe() local
538 if (!be) { in xen_blkbk_probe()
543 be->dev = dev; in xen_blkbk_probe()
544 dev_set_drvdata(&dev->dev, be); in xen_blkbk_probe()
546 be->blkif = xen_blkif_alloc(dev->otherend_id); in xen_blkbk_probe()
547 if (IS_ERR(be->blkif)) { in xen_blkbk_probe()
548 err = PTR_ERR(be->blkif); in xen_blkbk_probe()
549 be->blkif = NULL; in xen_blkbk_probe()
555 be->blkif->be = be; in xen_blkbk_probe()
557 err = xenbus_watch_pathfmt(dev, &be->backend_watch, NULL, in xen_blkbk_probe()
592 struct backend_info *be in backend_changed() local
594 struct xenbus_device *dev = be->dev; in backend_changed()
616 if (be->major | be->minor) { in backend_changed()
617 if (be->major != major || be->minor != minor) in backend_changed()
619 be->major, be->minor, major, minor); in backend_changed()
623 be->mode = xenbus_read(XBT_NIL, dev->nodename, "mode", NULL); in backend_changed()
624 if (IS_ERR(be->mode)) { in backend_changed()
625 err = PTR_ERR(be->mode); in backend_changed()
626 be->mode = NULL; in backend_changed()
642 be->major = major; in backend_changed()
643 be->minor = minor; in backend_changed()
645 err = xen_vbd_create(be->blkif, handle, major, minor, in backend_changed()
646 !strchr(be->mode, 'w'), cdrom); in backend_changed()
653 xen_vbd_free(&be->blkif->vbd); in backend_changed()
659 kfree(be->mode); in backend_changed()
660 be->mode = NULL; in backend_changed()
661 be->major = 0; in backend_changed()
662 be->minor = 0; in backend_changed()
665 xen_update_blkif_status(be->blkif); in backend_changed()
676 struct backend_info *be = dev_get_drvdata(&dev->dev); in frontend_changed() local
703 err = xen_blkif_disconnect(be->blkif); in frontend_changed()
709 err = connect_ring(be); in frontend_changed()
712 xen_update_blkif_status(be->blkif); in frontend_changed()
720 xen_blkif_disconnect(be->blkif); in frontend_changed()
745 static void connect(struct backend_info *be) in connect() argument
749 struct xenbus_device *dev = be->dev; in connect()
762 xen_blkbk_flush_diskcache(xbt, be, be->blkif->vbd.flush_support); in connect()
764 xen_blkbk_discard(xbt, be); in connect()
766 xen_blkbk_barrier(xbt, be, be->blkif->vbd.flush_support); in connect()
781 (unsigned long long)vbd_sz(&be->blkif->vbd)); in connect()
790 be->blkif->vbd.type | in connect()
791 (be->blkif->vbd.readonly ? VDISK_READONLY : 0)); in connect()
799 bdev_logical_block_size(be->blkif->vbd.bdev)); in connect()
806 bdev_physical_block_size(be->blkif->vbd.bdev)); in connect()
828 static int connect_ring(struct backend_info *be) in connect_ring() argument
830 struct xenbus_device *dev = be->dev; in connect_ring()
892 be->blkif->blk_protocol = BLKIF_PROTOCOL_DEFAULT; in connect_ring()
898 be->blkif->blk_protocol = BLKIF_PROTOCOL_NATIVE; in connect_ring()
900 be->blkif->blk_protocol = BLKIF_PROTOCOL_X86_32; in connect_ring()
902 be->blkif->blk_protocol = BLKIF_PROTOCOL_X86_64; in connect_ring()
913 be->blkif->vbd.feature_gnt_persistent = pers_grants; in connect_ring()
914 be->blkif->vbd.overflow_max_grants = 0; in connect_ring()
915 be->blkif->nr_ring_pages = nr_grefs; in connect_ring()
918 nr_grefs, evtchn, be->blkif->blk_protocol, protocol, in connect_ring()
925 list_add_tail(&req->free_list, &be->blkif->pending_free); in connect_ring()
940 err = xen_blkif_map(be->blkif, ring_ref, nr_grefs, evtchn); in connect_ring()
949 list_for_each_entry_safe(req, n, &be->blkif->pending_free, free_list) { in connect_ring()