vmdk.c (d8a7b061ae01e5692cc994f05ad6480d8c170125) vmdk.c (d34682cd4a06efe9ee3fc8cb7e8a0ea445299989)
1/*
2 * Block driver for the VMDK format
3 *
4 * Copyright (c) 2004 Fabrice Bellard
5 * Copyright (c) 2005 Filip Navara
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal

--- 414 unchanged lines hidden (view full) ---

423 extent->sectors = sectors;
424 extent->l1_table_offset = l1_offset;
425 extent->l1_backup_table_offset = l1_backup_offset;
426 extent->l1_size = l1_size;
427 extent->l1_entry_sectors = l2_size * cluster_sectors;
428 extent->l2_size = l2_size;
429 extent->cluster_sectors = flat ? sectors : cluster_sectors;
430
1/*
2 * Block driver for the VMDK format
3 *
4 * Copyright (c) 2004 Fabrice Bellard
5 * Copyright (c) 2005 Filip Navara
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal

--- 414 unchanged lines hidden (view full) ---

423 extent->sectors = sectors;
424 extent->l1_table_offset = l1_offset;
425 extent->l1_backup_table_offset = l1_backup_offset;
426 extent->l1_size = l1_size;
427 extent->l1_entry_sectors = l2_size * cluster_sectors;
428 extent->l2_size = l2_size;
429 extent->cluster_sectors = flat ? sectors : cluster_sectors;
430
431 if (!flat) {
432 bs->bl.write_zeroes_alignment =
433 MAX(bs->bl.write_zeroes_alignment, cluster_sectors);
434 }
435 if (s->num_extents > 1) {
436 extent->end_sector = (*(extent - 1)).end_sector + extent->sectors;
437 } else {
438 extent->end_sector = extent->sectors;
439 }
440 bs->total_sectors = extent->end_sector;
441 if (new_extent) {
442 *new_extent = extent;

--- 454 unchanged lines hidden (view full) ---

897
898fail:
899 g_free(s->create_type);
900 s->create_type = NULL;
901 vmdk_free_extents(bs);
902 return ret;
903}
904
431 if (s->num_extents > 1) {
432 extent->end_sector = (*(extent - 1)).end_sector + extent->sectors;
433 } else {
434 extent->end_sector = extent->sectors;
435 }
436 bs->total_sectors = extent->end_sector;
437 if (new_extent) {
438 *new_extent = extent;

--- 454 unchanged lines hidden (view full) ---

893
894fail:
895 g_free(s->create_type);
896 s->create_type = NULL;
897 vmdk_free_extents(bs);
898 return ret;
899}
900
901
902static int vmdk_refresh_limits(BlockDriverState *bs)
903{
904 BDRVVmdkState *s = bs->opaque;
905 int i;
906
907 for (i = 0; i < s->num_extents; i++) {
908 if (!s->extents[i].flat) {
909 bs->bl.write_zeroes_alignment =
910 MAX(bs->bl.write_zeroes_alignment,
911 s->extents[i].cluster_sectors);
912 }
913 }
914
915 return 0;
916}
917
905static int get_whole_cluster(BlockDriverState *bs,
906 VmdkExtent *extent,
907 uint64_t cluster_offset,
908 uint64_t offset,
909 bool allocate)
910{
911 int ret = VMDK_OK;
912 uint8_t *whole_grain = NULL;

--- 1095 unchanged lines hidden (view full) ---

2008 .bdrv_co_write_zeroes = vmdk_co_write_zeroes,
2009 .bdrv_close = vmdk_close,
2010 .bdrv_create = vmdk_create,
2011 .bdrv_co_flush_to_disk = vmdk_co_flush,
2012 .bdrv_co_get_block_status = vmdk_co_get_block_status,
2013 .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size,
2014 .bdrv_has_zero_init = vmdk_has_zero_init,
2015 .bdrv_get_specific_info = vmdk_get_specific_info,
918static int get_whole_cluster(BlockDriverState *bs,
919 VmdkExtent *extent,
920 uint64_t cluster_offset,
921 uint64_t offset,
922 bool allocate)
923{
924 int ret = VMDK_OK;
925 uint8_t *whole_grain = NULL;

--- 1095 unchanged lines hidden (view full) ---

2021 .bdrv_co_write_zeroes = vmdk_co_write_zeroes,
2022 .bdrv_close = vmdk_close,
2023 .bdrv_create = vmdk_create,
2024 .bdrv_co_flush_to_disk = vmdk_co_flush,
2025 .bdrv_co_get_block_status = vmdk_co_get_block_status,
2026 .bdrv_get_allocated_file_size = vmdk_get_allocated_file_size,
2027 .bdrv_has_zero_init = vmdk_has_zero_init,
2028 .bdrv_get_specific_info = vmdk_get_specific_info,
2029 .bdrv_refresh_limits = vmdk_refresh_limits,
2016
2017 .create_options = vmdk_create_options,
2018};
2019
2020static void bdrv_vmdk_init(void)
2021{
2022 bdrv_register(&bdrv_vmdk);
2023}
2024
2025block_init(bdrv_vmdk_init);
2030
2031 .create_options = vmdk_create_options,
2032};
2033
2034static void bdrv_vmdk_init(void)
2035{
2036 bdrv_register(&bdrv_vmdk);
2037}
2038
2039block_init(bdrv_vmdk_init);