diff options
author | jhendersonHDF <jhenderson@hdfgroup.org> | 2022-08-16 21:09:24 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-16 21:09:24 (GMT) |
commit | 9c9f70ed695a0022a55bf53d085b7540ae5b5281 (patch) | |
tree | 4d3105ac30f177afcbcfa9a7411a0f3eb3471e24 /src/H5Dio.c | |
parent | 21bf61ee91ce91d7a73c96d7c680f844c64c5309 (diff) | |
download | hdf5-9c9f70ed695a0022a55bf53d085b7540ae5b5281.zip hdf5-9c9f70ed695a0022a55bf53d085b7540ae5b5281.tar.gz hdf5-9c9f70ed695a0022a55bf53d085b7540ae5b5281.tar.bz2 |
[1.10 Merge] Hdf5 1 10 develop merges (#2013)
* Fix invalid comment about character encoding in H5Fint.c (#1845)
* Convert assertion on (possibly corrupt) file contents to normal error check (#1861)
* Convert assertion on (possibly corrupt) file contents to normal error check
* Committing clang-format changes
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
* Avoid allocating chunk map for contiguous and compact dataset I/O (#1927)
* Add documentation for parallel compression feature (#1981)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'src/H5Dio.c')
-rw-r--r-- | src/H5Dio.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/H5Dio.c b/src/H5Dio.c index 0236eb0..22aacb0 100644 --- a/src/H5Dio.c +++ b/src/H5Dio.c @@ -405,6 +405,7 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, H5S_t *mem_space, H5S_t *file_space H5D_chunk_map_t *fm = NULL; /* Chunk file<->memory mapping */ H5D_io_info_t io_info; /* Dataset I/O info */ H5D_type_info_t type_info; /* Datatype info for operation */ + H5D_layout_t layout_type; /* Dataset's layout type (contig, chunked, compact, etc.) */ hbool_t type_info_init = FALSE; /* Whether the datatype info has been initialized */ H5S_t *projected_mem_space = NULL; /* If not NULL, ptr to dataspace containing a */ /* projection of the supplied mem_space to a new */ @@ -436,6 +437,8 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, H5S_t *mem_space, H5S_t *file_space mem_space = file_space; nelmts = H5S_GET_SELECT_NPOINTS(mem_space); + layout_type = dataset->shared->layout.type; + /* Set up datatype info for operation */ if (H5D__typeinfo_init(dataset, mem_type_id, FALSE, &type_info) < 0) HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set up type info") @@ -560,11 +563,13 @@ H5D__read(H5D_t *dataset, hid_t mem_type_id, H5S_t *mem_space, H5S_t *file_space HDassert((*dataset->shared->layout.ops->is_space_alloc)(&dataset->shared->layout.storage) || (dataset->shared->layout.ops->is_data_cached && (*dataset->shared->layout.ops->is_data_cached)(dataset->shared)) || - dataset->shared->dcpl_cache.efl.nused > 0 || dataset->shared->layout.type == H5D_COMPACT); + dataset->shared->dcpl_cache.efl.nused > 0 || layout_type == H5D_COMPACT); /* Allocate the chunk map */ - if (NULL == (fm = H5FL_CALLOC(H5D_chunk_map_t))) - HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "can't allocate chunk map") + if (H5D_CONTIGUOUS != layout_type && H5D_COMPACT != layout_type) { + if (NULL == (fm = H5FL_CALLOC(H5D_chunk_map_t))) + HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "can't allocate chunk map") + } /* Call storage method's I/O initialization routine */ if (io_info.layout_ops.io_init && @@ -620,6 +625,7 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, H5S_t *mem_space, H5S_t *file_spac H5D_chunk_map_t *fm = NULL; /* Chunk file<->memory mapping */ H5D_io_info_t io_info; /* Dataset I/O info */ H5D_type_info_t type_info; /* Datatype info for operation */ + H5D_layout_t layout_type; /* Dataset's layout type (contig, chunked, compact, etc.) */ hbool_t type_info_init = FALSE; /* Whether the datatype info has been initialized */ hbool_t should_alloc_space = FALSE; /* Whether or not to initialize dataset's storage */ H5S_t *projected_mem_space = NULL; /* If not NULL, ptr to dataspace containing a */ @@ -646,6 +652,8 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, H5S_t *mem_space, H5S_t *file_spac /* check args */ HDassert(dataset && dataset->oloc.file); + layout_type = dataset->shared->layout.type; + /* All filters in the DCPL must have encoding enabled. */ if (!dataset->shared->checked_filters) { if (H5Z_can_apply(dataset->shared->dcpl_id, dataset->shared->type_id) < 0) @@ -792,8 +800,10 @@ H5D__write(H5D_t *dataset, hid_t mem_type_id, H5S_t *mem_space, H5S_t *file_spac } /* end if */ /* Allocate the chunk map */ - if (NULL == (fm = H5FL_CALLOC(H5D_chunk_map_t))) - HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "can't allocate chunk map") + if (H5D_CONTIGUOUS != layout_type && H5D_COMPACT != layout_type) { + if (NULL == (fm = H5FL_CALLOC(H5D_chunk_map_t))) + HGOTO_ERROR(H5E_DATASET, H5E_CANTALLOC, FAIL, "can't allocate chunk map") + } /* Call storage method's I/O initialization routine */ if (io_info.layout_ops.io_init && |