Lines Matching refs:ubd_dev
273 struct ubd *ubd_dev; in ubd_setup_common() local
326 ubd_dev = &ubd_devs[n]; in ubd_setup_common()
327 if(ubd_dev->file != NULL){ in ubd_setup_common()
345 ubd_dev->no_cow = 1; in ubd_setup_common()
348 ubd_dev->shared = 1; in ubd_setup_common()
351 ubd_dev->no_trim = 1; in ubd_setup_common()
377 if(ubd_dev->no_cow){ in ubd_setup_common()
387 ubd_dev->file = str; in ubd_setup_common()
388 ubd_dev->cow.file = backing_file; in ubd_setup_common()
389 ubd_dev->boot_openflags = flags; in ubd_setup_common()
558 static inline int ubd_file_size(struct ubd *ubd_dev, __u64 *size_out) in ubd_file_size() argument
572 if (ubd_dev->file && ubd_dev->cow.file) { in ubd_file_size()
573 file = ubd_dev->cow.file; in ubd_file_size()
578 fd = os_open_file(ubd_dev->file, of_read(OPENFLAGS()), 0); in ubd_file_size()
587 file = ubd_dev->file; in ubd_file_size()
777 static void ubd_close_dev(struct ubd *ubd_dev) in ubd_close_dev() argument
779 os_close_file(ubd_dev->fd); in ubd_close_dev()
780 if(ubd_dev->cow.file == NULL) in ubd_close_dev()
783 os_close_file(ubd_dev->cow.fd); in ubd_close_dev()
784 vfree(ubd_dev->cow.bitmap); in ubd_close_dev()
785 ubd_dev->cow.bitmap = NULL; in ubd_close_dev()
788 static int ubd_open_dev(struct ubd *ubd_dev) in ubd_open_dev() argument
795 ubd_dev->openflags = ubd_dev->boot_openflags; in ubd_open_dev()
797 create_ptr = (ubd_dev->cow.file != NULL) ? &create_cow : NULL; in ubd_open_dev()
798 back_ptr = ubd_dev->no_cow ? NULL : &ubd_dev->cow.file; in ubd_open_dev()
800 fd = open_ubd_file(ubd_dev->file, &ubd_dev->openflags, ubd_dev->shared, in ubd_open_dev()
801 back_ptr, &ubd_dev->cow.bitmap_offset, in ubd_open_dev()
802 &ubd_dev->cow.bitmap_len, &ubd_dev->cow.data_offset, in ubd_open_dev()
806 fd = create_cow_file(ubd_dev->file, ubd_dev->cow.file, in ubd_open_dev()
807 ubd_dev->openflags, SECTOR_SIZE, PAGE_SIZE, in ubd_open_dev()
808 &ubd_dev->cow.bitmap_offset, in ubd_open_dev()
809 &ubd_dev->cow.bitmap_len, in ubd_open_dev()
810 &ubd_dev->cow.data_offset); in ubd_open_dev()
813 "\"%s\"\n", ubd_dev->file, ubd_dev->cow.file); in ubd_open_dev()
818 printk("Failed to open '%s', errno = %d\n", ubd_dev->file, in ubd_open_dev()
822 ubd_dev->fd = fd; in ubd_open_dev()
824 if(ubd_dev->cow.file != NULL){ in ubd_open_dev()
825 blk_queue_max_hw_sectors(ubd_dev->queue, 8 * sizeof(long)); in ubd_open_dev()
828 ubd_dev->cow.bitmap = vmalloc(ubd_dev->cow.bitmap_len); in ubd_open_dev()
829 if(ubd_dev->cow.bitmap == NULL){ in ubd_open_dev()
835 err = read_cow_bitmap(ubd_dev->fd, ubd_dev->cow.bitmap, in ubd_open_dev()
836 ubd_dev->cow.bitmap_offset, in ubd_open_dev()
837 ubd_dev->cow.bitmap_len); in ubd_open_dev()
841 flags = ubd_dev->openflags; in ubd_open_dev()
843 err = open_ubd_file(ubd_dev->cow.file, &flags, ubd_dev->shared, NULL, in ubd_open_dev()
846 ubd_dev->cow.fd = err; in ubd_open_dev()
848 if (ubd_dev->no_trim == 0) { in ubd_open_dev()
849 ubd_dev->queue->limits.discard_granularity = SECTOR_SIZE; in ubd_open_dev()
850 ubd_dev->queue->limits.discard_alignment = SECTOR_SIZE; in ubd_open_dev()
851 blk_queue_max_discard_sectors(ubd_dev->queue, UBD_MAX_REQUEST); in ubd_open_dev()
852 blk_queue_max_write_zeroes_sectors(ubd_dev->queue, UBD_MAX_REQUEST); in ubd_open_dev()
853 blk_queue_flag_set(QUEUE_FLAG_DISCARD, ubd_dev->queue); in ubd_open_dev()
855 blk_queue_flag_set(QUEUE_FLAG_NONROT, ubd_dev->queue); in ubd_open_dev()
858 os_close_file(ubd_dev->fd); in ubd_open_dev()
864 struct ubd *ubd_dev = dev_get_drvdata(dev); in ubd_device_release() local
866 blk_cleanup_queue(ubd_dev->queue); in ubd_device_release()
867 blk_mq_free_tag_set(&ubd_dev->tag_set); in ubd_device_release()
868 *ubd_dev = ((struct ubd) DEFAULT_UBD); in ubd_device_release()
916 struct ubd *ubd_dev = &ubd_devs[n]; in ubd_add() local
919 if(ubd_dev->file == NULL) in ubd_add()
922 err = ubd_file_size(ubd_dev, &ubd_dev->size); in ubd_add()
928 ubd_dev->size = ROUND_BLOCK(ubd_dev->size); in ubd_add()
930 ubd_dev->tag_set.ops = &ubd_mq_ops; in ubd_add()
931 ubd_dev->tag_set.queue_depth = 64; in ubd_add()
932 ubd_dev->tag_set.numa_node = NUMA_NO_NODE; in ubd_add()
933 ubd_dev->tag_set.flags = BLK_MQ_F_SHOULD_MERGE; in ubd_add()
934 ubd_dev->tag_set.driver_data = ubd_dev; in ubd_add()
935 ubd_dev->tag_set.nr_hw_queues = 1; in ubd_add()
937 err = blk_mq_alloc_tag_set(&ubd_dev->tag_set); in ubd_add()
941 ubd_dev->queue = blk_mq_init_queue(&ubd_dev->tag_set); in ubd_add()
942 if (IS_ERR(ubd_dev->queue)) { in ubd_add()
943 err = PTR_ERR(ubd_dev->queue); in ubd_add()
947 ubd_dev->queue->queuedata = ubd_dev; in ubd_add()
948 blk_queue_write_cache(ubd_dev->queue, true, false); in ubd_add()
950 blk_queue_max_segments(ubd_dev->queue, MAX_SG); in ubd_add()
951 blk_queue_segment_boundary(ubd_dev->queue, PAGE_SIZE - 1); in ubd_add()
952 err = ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, &ubd_gendisk[n]); in ubd_add()
959 ubd_disk_register(fake_major, ubd_dev->size, n, in ubd_add()
974 blk_mq_free_tag_set(&ubd_dev->tag_set); in ubd_add()
975 if (!(IS_ERR(ubd_dev->queue))) in ubd_add()
976 blk_cleanup_queue(ubd_dev->queue); in ubd_add()
1019 struct ubd *ubd_dev; in ubd_get_config() local
1028 ubd_dev = &ubd_devs[n]; in ubd_get_config()
1031 if(ubd_dev->file == NULL){ in ubd_get_config()
1036 CONFIG_CHUNK(str, size, len, ubd_dev->file, 0); in ubd_get_config()
1038 if(ubd_dev->cow.file != NULL){ in ubd_get_config()
1040 CONFIG_CHUNK(str, size, len, ubd_dev->cow.file, 1); in ubd_get_config()
1062 struct ubd *ubd_dev; in ubd_remove() local
1067 ubd_dev = &ubd_devs[n]; in ubd_remove()
1069 if(ubd_dev->file == NULL) in ubd_remove()
1074 if(ubd_dev->count > 0) in ubd_remove()
1090 platform_device_unregister(&ubd_dev->pdev); in ubd_remove()
1118 struct ubd *ubd_dev = &ubd_devs[0]; in ubd0_init() local
1121 if(ubd_dev->file == NULL) in ubd0_init()
1122 ubd_dev->file = "root_fs"; in ubd0_init()
1220 struct ubd *ubd_dev = disk->private_data; in ubd_open() local
1224 if(ubd_dev->count == 0){ in ubd_open()
1225 err = ubd_open_dev(ubd_dev); in ubd_open()
1228 disk->disk_name, ubd_dev->file, -err); in ubd_open()
1232 ubd_dev->count++; in ubd_open()
1233 set_disk_ro(disk, !ubd_dev->openflags.w); in ubd_open()
1248 struct ubd *ubd_dev = disk->private_data; in ubd_release() local
1251 if(--ubd_dev->count == 0) in ubd_release()
1252 ubd_close_dev(ubd_dev); in ubd_release()
1418 struct ubd *ubd_dev = hctx->queue->queuedata; in ubd_queue_rq() local
1424 spin_lock_irq(&ubd_dev->lock); in ubd_queue_rq()
1432 ret = ubd_submit_request(ubd_dev, req); in ubd_queue_rq()
1439 spin_unlock_irq(&ubd_dev->lock); in ubd_queue_rq()
1453 struct ubd *ubd_dev = bdev->bd_disk->private_data; in ubd_getgeo() local
1457 geo->cylinders = ubd_dev->size / (128 * 32 * 512); in ubd_getgeo()
1464 struct ubd *ubd_dev = bdev->bd_disk->private_data; in ubd_ioctl() local
1471 ubd_id[ATA_ID_CYLS] = ubd_dev->size / (128 * 32 * 512); in ubd_ioctl()