Lines Matching refs:ubd_dev
266 struct ubd *ubd_dev; in ubd_setup_common() local
319 ubd_dev = &ubd_devs[n]; in ubd_setup_common()
320 if(ubd_dev->file != NULL){ in ubd_setup_common()
338 ubd_dev->no_cow = 1; in ubd_setup_common()
341 ubd_dev->shared = 1; in ubd_setup_common()
367 if(ubd_dev->no_cow){ in ubd_setup_common()
377 ubd_dev->file = str; in ubd_setup_common()
378 ubd_dev->cow.file = backing_file; in ubd_setup_common()
379 ubd_dev->boot_openflags = flags; in ubd_setup_common()
559 static inline int ubd_file_size(struct ubd *ubd_dev, __u64 *size_out) in ubd_file_size() argument
573 if (ubd_dev->file && ubd_dev->cow.file) { in ubd_file_size()
574 file = ubd_dev->cow.file; in ubd_file_size()
579 fd = os_open_file(ubd_dev->file, of_read(OPENFLAGS()), 0); in ubd_file_size()
588 file = ubd_dev->file; in ubd_file_size()
778 static void ubd_close_dev(struct ubd *ubd_dev) in ubd_close_dev() argument
780 os_close_file(ubd_dev->fd); in ubd_close_dev()
781 if(ubd_dev->cow.file == NULL) in ubd_close_dev()
784 os_close_file(ubd_dev->cow.fd); in ubd_close_dev()
785 vfree(ubd_dev->cow.bitmap); in ubd_close_dev()
786 ubd_dev->cow.bitmap = NULL; in ubd_close_dev()
789 static int ubd_open_dev(struct ubd *ubd_dev) in ubd_open_dev() argument
796 ubd_dev->openflags = ubd_dev->boot_openflags; in ubd_open_dev()
798 create_ptr = (ubd_dev->cow.file != NULL) ? &create_cow : NULL; in ubd_open_dev()
799 back_ptr = ubd_dev->no_cow ? NULL : &ubd_dev->cow.file; in ubd_open_dev()
801 fd = open_ubd_file(ubd_dev->file, &ubd_dev->openflags, ubd_dev->shared, in ubd_open_dev()
802 back_ptr, &ubd_dev->cow.bitmap_offset, in ubd_open_dev()
803 &ubd_dev->cow.bitmap_len, &ubd_dev->cow.data_offset, in ubd_open_dev()
807 fd = create_cow_file(ubd_dev->file, ubd_dev->cow.file, in ubd_open_dev()
808 ubd_dev->openflags, 1 << 9, PAGE_SIZE, in ubd_open_dev()
809 &ubd_dev->cow.bitmap_offset, in ubd_open_dev()
810 &ubd_dev->cow.bitmap_len, in ubd_open_dev()
811 &ubd_dev->cow.data_offset); in ubd_open_dev()
814 "\"%s\"\n", ubd_dev->file, ubd_dev->cow.file); in ubd_open_dev()
819 printk("Failed to open '%s', errno = %d\n", ubd_dev->file, in ubd_open_dev()
823 ubd_dev->fd = fd; in ubd_open_dev()
825 if(ubd_dev->cow.file != NULL){ in ubd_open_dev()
826 blk_queue_max_hw_sectors(ubd_dev->queue, 8 * sizeof(long)); in ubd_open_dev()
829 ubd_dev->cow.bitmap = vmalloc(ubd_dev->cow.bitmap_len); in ubd_open_dev()
830 if(ubd_dev->cow.bitmap == NULL){ in ubd_open_dev()
836 err = read_cow_bitmap(ubd_dev->fd, ubd_dev->cow.bitmap, in ubd_open_dev()
837 ubd_dev->cow.bitmap_offset, in ubd_open_dev()
838 ubd_dev->cow.bitmap_len); in ubd_open_dev()
842 flags = ubd_dev->openflags; in ubd_open_dev()
844 err = open_ubd_file(ubd_dev->cow.file, &flags, ubd_dev->shared, NULL, in ubd_open_dev()
847 ubd_dev->cow.fd = err; in ubd_open_dev()
851 os_close_file(ubd_dev->fd); in ubd_open_dev()
857 struct ubd *ubd_dev = dev_get_drvdata(dev); in ubd_device_release() local
859 blk_cleanup_queue(ubd_dev->queue); in ubd_device_release()
860 *ubd_dev = ((struct ubd) DEFAULT_UBD); in ubd_device_release()
904 struct ubd *ubd_dev = &ubd_devs[n]; in ubd_add() local
907 if(ubd_dev->file == NULL) in ubd_add()
910 err = ubd_file_size(ubd_dev, &ubd_dev->size); in ubd_add()
916 ubd_dev->size = ROUND_BLOCK(ubd_dev->size); in ubd_add()
918 INIT_LIST_HEAD(&ubd_dev->restart); in ubd_add()
919 sg_init_table(ubd_dev->sg, MAX_SG); in ubd_add()
922 ubd_dev->queue = blk_init_queue(do_ubd_request, &ubd_dev->lock); in ubd_add()
923 if (ubd_dev->queue == NULL) { in ubd_add()
927 ubd_dev->queue->queuedata = ubd_dev; in ubd_add()
928 blk_queue_write_cache(ubd_dev->queue, true, false); in ubd_add()
930 blk_queue_max_segments(ubd_dev->queue, MAX_SG); in ubd_add()
931 err = ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, &ubd_gendisk[n]); in ubd_add()
938 ubd_disk_register(fake_major, ubd_dev->size, n, in ubd_add()
953 blk_cleanup_queue(ubd_dev->queue); in ubd_add()
996 struct ubd *ubd_dev; in ubd_get_config() local
1005 ubd_dev = &ubd_devs[n]; in ubd_get_config()
1008 if(ubd_dev->file == NULL){ in ubd_get_config()
1013 CONFIG_CHUNK(str, size, len, ubd_dev->file, 0); in ubd_get_config()
1015 if(ubd_dev->cow.file != NULL){ in ubd_get_config()
1017 CONFIG_CHUNK(str, size, len, ubd_dev->cow.file, 1); in ubd_get_config()
1039 struct ubd *ubd_dev; in ubd_remove() local
1044 ubd_dev = &ubd_devs[n]; in ubd_remove()
1046 if(ubd_dev->file == NULL) in ubd_remove()
1051 if(ubd_dev->count > 0) in ubd_remove()
1067 platform_device_unregister(&ubd_dev->pdev); in ubd_remove()
1095 struct ubd *ubd_dev = &ubd_devs[0]; in ubd0_init() local
1098 if(ubd_dev->file == NULL) in ubd0_init()
1099 ubd_dev->file = "root_fs"; in ubd0_init()
1197 struct ubd *ubd_dev = disk->private_data; in ubd_open() local
1201 if(ubd_dev->count == 0){ in ubd_open()
1202 err = ubd_open_dev(ubd_dev); in ubd_open()
1205 disk->disk_name, ubd_dev->file, -err); in ubd_open()
1209 ubd_dev->count++; in ubd_open()
1210 set_disk_ro(disk, !ubd_dev->openflags.w); in ubd_open()
1225 struct ubd *ubd_dev = disk->private_data; in ubd_release() local
1228 if(--ubd_dev->count == 0) in ubd_release()
1229 ubd_close_dev(ubd_dev); in ubd_release()
1299 struct ubd *ubd_dev = disk->private_data; in prepare_request() local
1302 io_req->fds[0] = (ubd_dev->cow.file != NULL) ? ubd_dev->cow.fd : in prepare_request()
1303 ubd_dev->fd; in prepare_request()
1304 io_req->fds[1] = ubd_dev->fd; in prepare_request()
1313 io_req->offsets[1] = ubd_dev->cow.data_offset; in prepare_request()
1317 if(ubd_dev->cow.file != NULL) in prepare_request()
1318 cowify_req(io_req, ubd_dev->cow.bitmap, in prepare_request()
1319 ubd_dev->cow.bitmap_offset, ubd_dev->cow.bitmap_len); in prepare_request()
1328 struct ubd *ubd_dev = disk->private_data; in prepare_flush_request() local
1331 io_req->fds[0] = (ubd_dev->cow.file != NULL) ? ubd_dev->cow.fd : in prepare_flush_request()
1332 ubd_dev->fd; in prepare_flush_request()
1414 struct ubd *ubd_dev = bdev->bd_disk->private_data; in ubd_getgeo() local
1418 geo->cylinders = ubd_dev->size / (128 * 32 * 512); in ubd_getgeo()
1425 struct ubd *ubd_dev = bdev->bd_disk->private_data; in ubd_ioctl() local
1432 ubd_id[ATA_ID_CYLS] = ubd_dev->size / (128 * 32 * 512); in ubd_ioctl()