diff options
Diffstat (limited to 'src/H5HFdblock.c')
-rw-r--r-- | src/H5HFdblock.c | 336 |
1 files changed, 164 insertions, 172 deletions
diff --git a/src/H5HFdblock.c b/src/H5HFdblock.c index 4295f2a..657306b 100644 --- a/src/H5HFdblock.c +++ b/src/H5HFdblock.c @@ -6,7 +6,7 @@ * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * + * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -26,39 +26,34 @@ /* Module Setup */ /****************/ -#include "H5HFmodule.h" /* This source code file is part of the H5HF module */ - +#include "H5HFmodule.h" /* This source code file is part of the H5HF module */ /***********/ /* Headers */ /***********/ -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5Fprivate.h" /* File access */ -#include "H5HFpkg.h" /* Fractal heaps */ -#include "H5MFprivate.h" /* File memory management */ -#include "H5VMprivate.h" /* Vectors and arrays */ +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Fprivate.h" /* File access */ +#include "H5HFpkg.h" /* Fractal heaps */ +#include "H5MFprivate.h" /* File memory management */ +#include "H5VMprivate.h" /* Vectors and arrays */ /****************/ /* Local Macros */ /****************/ - /******************/ /* Local Typedefs */ /******************/ - /********************/ /* Package Typedefs */ /********************/ - /********************/ /* Local Prototypes */ /********************/ - /*********************/ /* Package Variables */ /*********************/ @@ -66,18 +61,14 @@ /* Declare a free list to manage the H5HF_direct_t struct */ H5FL_DEFINE(H5HF_direct_t); - /*****************************/ /* Library Private Variables */ /*****************************/ - /*******************/ /* Local Variables */ /*******************/ - - /*------------------------------------------------------------------------- * Function: H5HF__man_dblock_create * @@ -91,14 +82,14 @@ H5FL_DEFINE(H5HF_direct_t); *------------------------------------------------------------------------- */ herr_t -H5HF__man_dblock_create(H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblock, - unsigned par_entry, haddr_t *addr_p, H5HF_free_section_t **ret_sec_node) +H5HF__man_dblock_create(H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblock, unsigned par_entry, haddr_t *addr_p, + H5HF_free_section_t **ret_sec_node) { - H5HF_free_section_t *sec_node; /* Pointer to free space section for block */ - H5HF_direct_t *dblock = NULL; /* Pointer to direct block */ - haddr_t dblock_addr; /* Direct block's address */ - size_t free_space; /* Free space in new block */ - herr_t ret_value = SUCCEED; /* Return value */ + H5HF_free_section_t *sec_node; /* Pointer to free space section for block */ + H5HF_direct_t * dblock = NULL; /* Pointer to direct block */ + haddr_t dblock_addr; /* Direct block's address */ + size_t free_space; /* Free space in new block */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -110,58 +101,61 @@ H5HF__man_dblock_create(H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblock, /* * Allocate file and memory data structures. */ - if(NULL == (dblock = H5FL_MALLOC(H5HF_direct_t))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for fractal heap direct block") + if (NULL == (dblock = H5FL_MALLOC(H5HF_direct_t))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for fractal heap direct block") /* Reset the metadata cache info for the heap header */ HDmemset(&dblock->cache_info, 0, sizeof(H5AC_info_t)); /* Share common heap information */ dblock->hdr = hdr; - if(H5HF_hdr_incr(hdr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, FAIL, "can't increment reference count on shared heap header") + if (H5HF_hdr_incr(hdr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, FAIL, "can't increment reference count on shared heap header") /* Set info for direct block */ - if(par_iblock) { - unsigned par_row = par_entry / hdr->man_dtable.cparam.width; /* Row for block */ + if (par_iblock) { + unsigned par_row = par_entry / hdr->man_dtable.cparam.width; /* Row for block */ /* Compute offset & size, based on parent's information */ dblock->block_off = par_iblock->block_off; dblock->block_off += hdr->man_dtable.row_block_off[par_row]; - dblock->block_off += hdr->man_dtable.row_block_size[par_row] * (par_entry % hdr->man_dtable.cparam.width); + dblock->block_off += + hdr->man_dtable.row_block_size[par_row] * (par_entry % hdr->man_dtable.cparam.width); H5_CHECKED_ASSIGN(dblock->size, size_t, hdr->man_dtable.row_block_size[par_row], hsize_t); } /* end if */ else { /* Must be the root direct block */ dblock->block_off = 0; - dblock->size = hdr->man_dtable.cparam.start_block_size; + dblock->size = hdr->man_dtable.cparam.start_block_size; } /* end else */ dblock->file_size = 0; - free_space = dblock->size - H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr); + free_space = dblock->size - H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr); /* Allocate buffer for block */ -/* XXX: Change to using free-list factories */ - if((dblock->blk = H5FL_BLK_MALLOC(direct_block, dblock->size)) == NULL) + /* XXX: Change to using free-list factories */ + if ((dblock->blk = H5FL_BLK_MALLOC(direct_block, dblock->size)) == NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed") HDmemset(dblock->blk, 0, dblock->size); - dblock->write_buf = NULL; + dblock->write_buf = NULL; dblock->write_size = 0; /* Allocate [temporary] space for the direct block on disk */ - if(H5F_USE_TMP_SPACE(hdr->f)) { - if(HADDR_UNDEF == (dblock_addr = H5MF_alloc_tmp(hdr->f, (hsize_t)dblock->size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for fractal heap direct block") + if (H5F_USE_TMP_SPACE(hdr->f)) { + if (HADDR_UNDEF == (dblock_addr = H5MF_alloc_tmp(hdr->f, (hsize_t)dblock->size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "file allocation failed for fractal heap direct block") } /* end if */ else { - if(HADDR_UNDEF == (dblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_FHEAP_DBLOCK, (hsize_t)dblock->size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for fractal heap direct block") + if (HADDR_UNDEF == (dblock_addr = H5MF_alloc(hdr->f, H5FD_MEM_FHEAP_DBLOCK, (hsize_t)dblock->size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "file allocation failed for fractal heap direct block") } /* end else */ /* Attach to parent indirect block, if there is one */ dblock->parent = par_iblock; - if(dblock->parent) { - if(H5HF_man_iblock_attach(dblock->parent, par_entry, dblock_addr) < 0) + if (dblock->parent) { + if (H5HF_man_iblock_attach(dblock->parent, par_entry, dblock_addr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTATTACH, FAIL, "can't attach direct block to parent indirect block") dblock->fd_parent = par_iblock; } /* end if */ @@ -170,42 +164,41 @@ H5HF__man_dblock_create(H5HF_hdr_t *hdr, H5HF_indirect_t *par_iblock, dblock->par_entry = par_entry; /* Create a new 'single' section for the free space in the block */ - if(NULL == (sec_node = H5HF_sect_single_new((dblock->block_off + H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr)), - free_space, dblock->parent, dblock->par_entry))) + if (NULL == (sec_node = H5HF_sect_single_new((dblock->block_off + H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr)), + free_space, dblock->parent, dblock->par_entry))) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't create section for new direct block's free space") /* Check what to do with section node */ - if(ret_sec_node) + if (ret_sec_node) /* Pass back the pointer to the section instead of adding it to the free list */ *ret_sec_node = sec_node; else { /* Add new free space to the heap's list of space */ - if(H5HF__space_add(hdr, sec_node, 0) < 0) + if (H5HF__space_add(hdr, sec_node, 0) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't add direct block free space to global list") } /* end else */ /* Cache the new fractal heap direct block */ - if(H5AC_insert_entry(hdr->f, H5AC_FHEAP_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't add fractal heap direct block to cache") + if (H5AC_insert_entry(hdr->f, H5AC_FHEAP_DBLOCK, dblock_addr, dblock, H5AC__NO_FLAGS_SET) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't add fractal heap direct block to cache") /* Increase the allocated heap size */ - if(H5HF_hdr_inc_alloc(hdr, dblock->size) < 0) + if (H5HF_hdr_inc_alloc(hdr, dblock->size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't increase allocated heap size") /* Set the address of of direct block, if requested */ - if(addr_p) + if (addr_p) *addr_p = dblock_addr; done: - if(ret_value < 0) - if(dblock) - if(H5HF_man_dblock_dest(dblock) < 0) + if (ret_value < 0) + if (dblock) + if (H5HF_man_dblock_dest(dblock) < 0) HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy fractal heap direct block") FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__man_dblock_create() */ - /*------------------------------------------------------------------------- * Function: H5HF__man_dblock_destroy * @@ -223,12 +216,11 @@ done: *------------------------------------------------------------------------- */ herr_t -H5HF__man_dblock_destroy(H5HF_hdr_t *hdr, H5HF_direct_t *dblock, - haddr_t dblock_addr, hbool_t *parent_removed) +H5HF__man_dblock_destroy(H5HF_hdr_t *hdr, H5HF_direct_t *dblock, haddr_t dblock_addr, hbool_t *parent_removed) { - hsize_t dblock_size; /* Size of direct block on disk */ - unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting indirect block */ - herr_t ret_value = SUCCEED; /* Return value */ + hsize_t dblock_size; /* Size of direct block on disk */ + unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting indirect block */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -239,32 +231,32 @@ H5HF__man_dblock_destroy(H5HF_hdr_t *hdr, H5HF_direct_t *dblock, HDassert(dblock); /* Check for I/O filters on this heap */ - if(hdr->filter_len > 0) { + if (hdr->filter_len > 0) { /* Check for root direct block */ - if(dblock->parent == NULL) + if (dblock->parent == NULL) /* Get direct block's actual size */ dblock_size = (hsize_t)hdr->pline_root_direct_size; else { - H5HF_indirect_t *par_iblock; /* Parent indirect block */ - unsigned par_entry; /* Entry in parent indirect block */ + H5HF_indirect_t *par_iblock; /* Parent indirect block */ + unsigned par_entry; /* Entry in parent indirect block */ /* Get parent information */ par_iblock = dblock->parent; - par_entry = dblock->par_entry; + par_entry = dblock->par_entry; /* Get direct block's actual size */ dblock_size = (hsize_t)par_iblock->filt_ents[par_entry].size; } /* end else */ - } /* end if */ + } /* end if */ else dblock_size = (hsize_t)dblock->size; /* Reset the parent_removed flag */ - if(parent_removed) + if (parent_removed) *parent_removed = FALSE; /* Check for root direct block */ - if(hdr->man_dtable.curr_root_rows == 0) { + if (hdr->man_dtable.curr_root_rows == 0) { /* Sanity check */ HDassert(hdr->man_dtable.table_addr == dblock_addr); HDassert(hdr->man_dtable.cparam.start_block_size == dblock->size); @@ -273,7 +265,7 @@ H5HF__man_dblock_destroy(H5HF_hdr_t *hdr, H5HF_direct_t *dblock, HDassert(!H5HF_man_iter_ready(&hdr->next_block)); /* Reset header information back to "empty heap" state */ - if(H5HF__hdr_empty(hdr) < 0) + if (H5HF__hdr_empty(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTSHRINK, FAIL, "can't make heap empty") } /* end if */ else { @@ -281,30 +273,30 @@ H5HF__man_dblock_destroy(H5HF_hdr_t *hdr, H5HF_direct_t *dblock, hdr->man_alloc_size -= dblock->size; /* Check for this direct block being the highest in the heap */ - if((dblock->block_off + dblock->size) == hdr->man_iter_off) + if ((dblock->block_off + dblock->size) == hdr->man_iter_off) /* Move 'next block' iterator backwards (may shrink heap) */ - if(H5HF__hdr_reverse_iter(hdr, dblock_addr) < 0) + if (H5HF__hdr_reverse_iter(hdr, dblock_addr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't reverse 'next block' iterator") /* Detach from parent indirect block */ - if(dblock->parent) { + if (dblock->parent) { /* Destroy flush dependency between direct block and parent */ - if(H5AC_destroy_flush_dependency(dblock->fd_parent, dblock) < 0) + if (H5AC_destroy_flush_dependency(dblock->fd_parent, dblock) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, "unable to destroy flush dependency") dblock->fd_parent = NULL; /* If this is the last direct block for the indirect block, the * indirect block will be removed when this direct block is detached */ - if(parent_removed && 1 == dblock->parent->nchildren) + if (parent_removed && 1 == dblock->parent->nchildren) *parent_removed = TRUE; - if(H5HF__man_iblock_detach(dblock->parent, dblock->par_entry) < 0) + if (H5HF__man_iblock_detach(dblock->parent, dblock->par_entry) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTATTACH, FAIL, "can't detach from parent indirect block"); - dblock->parent = NULL; + dblock->parent = NULL; dblock->par_entry = 0; } /* end if */ - } /* end else */ + } /* end else */ /* Indicate that the direct block should be deleted */ dblock->file_size = dblock_size; @@ -316,13 +308,12 @@ H5HF__man_dblock_destroy(H5HF_hdr_t *hdr, H5HF_direct_t *dblock, done: /* Unprotect the indirect block, with appropriate flags */ - if(H5AC_unprotect(hdr->f, H5AC_FHEAP_DBLOCK, dblock_addr, dblock, cache_flags) < 0) + if (H5AC_unprotect(hdr->f, H5AC_FHEAP_DBLOCK, dblock_addr, dblock, cache_flags) < 0) HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap direct block") FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__man_dblock_destroy() */ - /*------------------------------------------------------------------------- * Function: H5HF__man_dblock_new * @@ -337,12 +328,11 @@ done: *------------------------------------------------------------------------- */ herr_t -H5HF__man_dblock_new(H5HF_hdr_t *hdr, size_t request, - H5HF_free_section_t **ret_sec_node) +H5HF__man_dblock_new(H5HF_hdr_t *hdr, size_t request, H5HF_free_section_t **ret_sec_node) { - haddr_t dblock_addr; /* Address of new direct block */ - size_t min_dblock_size; /* Min. size of direct block to allocate */ - herr_t ret_value = SUCCEED; /* Return value */ + haddr_t dblock_addr; /* Address of new direct block */ + size_t min_dblock_size; /* Min. size of direct block to allocate */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -353,7 +343,7 @@ H5HF__man_dblock_new(H5HF_hdr_t *hdr, size_t request, HDassert(request > 0); /* Compute the min. size of the direct block needed to fulfill the request */ - if(request < hdr->man_dtable.cparam.start_block_size) + if (request < hdr->man_dtable.cparam.start_block_size) min_dblock_size = hdr->man_dtable.cparam.start_block_size; else { min_dblock_size = ((size_t)1) << (1 + H5VM_log2_gen((uint64_t)request)); @@ -361,57 +351,62 @@ H5HF__man_dblock_new(H5HF_hdr_t *hdr, size_t request, } /* end else */ /* Adjust the size of block needed to fulfill request, with overhead */ - if(min_dblock_size < H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr) + request) + if (min_dblock_size < H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr) + request) min_dblock_size *= 2; /* Check if this is the first block in the heap */ - if(!H5F_addr_defined(hdr->man_dtable.table_addr) && - min_dblock_size == hdr->man_dtable.cparam.start_block_size) { + if (!H5F_addr_defined(hdr->man_dtable.table_addr) && + min_dblock_size == hdr->man_dtable.cparam.start_block_size) { /* Create new direct block at starting offset */ - if(H5HF__man_dblock_create(hdr, NULL, 0, &dblock_addr, ret_sec_node) < 0) + if (H5HF__man_dblock_create(hdr, NULL, 0, &dblock_addr, ret_sec_node) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "can't allocate fractal heap direct block") /* Point root at new direct block */ hdr->man_dtable.curr_root_rows = 0; - hdr->man_dtable.table_addr = dblock_addr; - if(hdr->filter_len > 0) { - hdr->pline_root_direct_size = hdr->man_dtable.cparam.start_block_size; + hdr->man_dtable.table_addr = dblock_addr; + if (hdr->filter_len > 0) { + hdr->pline_root_direct_size = hdr->man_dtable.cparam.start_block_size; hdr->pline_root_direct_filter_mask = 0; } /* end if */ /* Extend heap to cover new direct block */ - if(H5HF_hdr_adjust_heap(hdr, (hsize_t)hdr->man_dtable.cparam.start_block_size, (hssize_t)hdr->man_dtable.row_tot_dblock_free[0]) < 0) + if (H5HF_hdr_adjust_heap(hdr, (hsize_t)hdr->man_dtable.cparam.start_block_size, + (hssize_t)hdr->man_dtable.row_tot_dblock_free[0]) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTEXTEND, FAIL, "can't increase space to cover root direct block") } /* end if */ /* Root entry already exists, allocate direct block from root indirect block */ else { - H5HF_indirect_t *iblock; /* Pointer to indirect block to create */ - unsigned next_row; /* Iterator's next block row */ - unsigned next_entry; /* Iterator's next block entry */ - size_t next_size; /* Size of next direct block to create */ + H5HF_indirect_t *iblock; /* Pointer to indirect block to create */ + unsigned next_row; /* Iterator's next block row */ + unsigned next_entry; /* Iterator's next block entry */ + size_t next_size; /* Size of next direct block to create */ - /* Update iterator to reflect any previous increments as well as allow for requested direct block size */ - if(H5HF__hdr_update_iter(hdr, min_dblock_size) < 0) + /* Update iterator to reflect any previous increments as well as allow for requested direct block size + */ + if (H5HF__hdr_update_iter(hdr, min_dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTUPDATE, FAIL, "unable to update block iterator") /* Retrieve information about current iterator position */ - if(H5HF_man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) + if (H5HF_man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator location") HDassert(next_row < iblock->nrows); H5_CHECKED_ASSIGN(next_size, size_t, hdr->man_dtable.row_block_size[next_row], hsize_t); /* Check for skipping over blocks */ - if(min_dblock_size > next_size) { -HDfprintf(stderr, "%s: Skipping direct block sizes not supported, min_dblock_size = %Zu, next_size = %Zu\n", FUNC, min_dblock_size, next_size); -HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, FAIL, "skipping direct block sizes not supported yet") + if (min_dblock_size > next_size) { + HDfprintf( + stderr, + "%s: Skipping direct block sizes not supported, min_dblock_size = %zu, next_size = %zu\n", + FUNC, min_dblock_size, next_size); + HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, FAIL, "skipping direct block sizes not supported yet") } /* end if */ /* Advance "next block" iterator to next direct block entry */ - if(H5HF_hdr_inc_iter(hdr, (hsize_t)next_size, 1) < 0) + if (H5HF_hdr_inc_iter(hdr, (hsize_t)next_size, 1) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, FAIL, "can't increment 'next block' iterator") /* Create new direct block at current location*/ - if(H5HF__man_dblock_create(hdr, iblock, next_entry, &dblock_addr, ret_sec_node) < 0) + if (H5HF__man_dblock_create(hdr, iblock, next_entry, &dblock_addr, ret_sec_node) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "can't allocate fractal heap direct block") } /* end else */ @@ -419,7 +414,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__man_dblock_new() */ - /*------------------------------------------------------------------------- * Function: H5HF__man_dblock_protect * @@ -434,13 +428,12 @@ done: *------------------------------------------------------------------------- */ H5HF_direct_t * -H5HF__man_dblock_protect(H5HF_hdr_t *hdr, haddr_t dblock_addr, - size_t dblock_size, H5HF_indirect_t *par_iblock, unsigned par_entry, - unsigned flags) +H5HF__man_dblock_protect(H5HF_hdr_t *hdr, haddr_t dblock_addr, size_t dblock_size, + H5HF_indirect_t *par_iblock, unsigned par_entry, unsigned flags) { - H5HF_direct_t *dblock; /* Direct block from cache */ - H5HF_dblock_cache_ud_t udata; /* parent and other infor for deserializing direct block */ - H5HF_direct_t *ret_value = NULL; /* Return value */ + H5HF_direct_t * dblock; /* Direct block from cache */ + H5HF_dblock_cache_ud_t udata; /* parent and other infor for deserializing direct block */ + H5HF_direct_t * ret_value = NULL; /* Return value */ FUNC_ENTER_PACKAGE @@ -455,9 +448,9 @@ H5HF__man_dblock_protect(H5HF_hdr_t *hdr, haddr_t dblock_addr, HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0); /* Set up parent info */ - udata.par_info.hdr = hdr; + udata.par_info.hdr = hdr; udata.par_info.iblock = par_iblock; - udata.par_info.entry = par_entry; + udata.par_info.entry = par_entry; /* set up the file pointer in the user data */ udata.f = hdr->f; @@ -468,31 +461,32 @@ H5HF__man_dblock_protect(H5HF_hdr_t *hdr, haddr_t dblock_addr, /* compute the on disk image size -- observe that odi_size and * dblock_size will be identical if there is no filtering. */ - if(hdr->filter_len > 0) { - if(par_iblock == NULL) { - udata.odi_size = hdr->pline_root_direct_size; - udata.filter_mask = hdr->pline_root_direct_filter_mask; - } /* end if */ + if (hdr->filter_len > 0) { + if (par_iblock == NULL) { + udata.odi_size = hdr->pline_root_direct_size; + udata.filter_mask = hdr->pline_root_direct_filter_mask; + } /* end if */ else { - /* Sanity check */ - HDassert(H5F_addr_eq(par_iblock->ents[par_entry].addr, dblock_addr)); + /* Sanity check */ + HDassert(H5F_addr_eq(par_iblock->ents[par_entry].addr, dblock_addr)); - /* Set up parameters to read filtered direct block */ - udata.odi_size = par_iblock->filt_ents[par_entry].size; + /* Set up parameters to read filtered direct block */ + udata.odi_size = par_iblock->filt_ents[par_entry].size; udata.filter_mask = par_iblock->filt_ents[par_entry].filter_mask; - } /* end else */ - } /* end if */ + } /* end else */ + } /* end if */ else { - udata.odi_size = dblock_size; + udata.odi_size = dblock_size; udata.filter_mask = 0; } /* end else */ /* Reset compression context info */ udata.decompressed = FALSE; - udata.dblk = NULL; + udata.dblk = NULL; /* Protect the direct block */ - if(NULL == (dblock = (H5HF_direct_t *)H5AC_protect(hdr->f, H5AC_FHEAP_DBLOCK, dblock_addr, &udata, flags))) + if (NULL == + (dblock = (H5HF_direct_t *)H5AC_protect(hdr->f, H5AC_FHEAP_DBLOCK, dblock_addr, &udata, flags))) HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, NULL, "unable to protect fractal heap direct block") /* Set the return value */ @@ -502,7 +496,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__man_dblock_protect() */ - /*------------------------------------------------------------------------- * Function: H5HF__man_dblock_locate * @@ -516,16 +509,15 @@ done: *------------------------------------------------------------------------- */ herr_t -H5HF__man_dblock_locate(H5HF_hdr_t *hdr, hsize_t obj_off, - H5HF_indirect_t **ret_iblock, unsigned *ret_entry, hbool_t *ret_did_protect, - unsigned flags) +H5HF__man_dblock_locate(H5HF_hdr_t *hdr, hsize_t obj_off, H5HF_indirect_t **ret_iblock, unsigned *ret_entry, + hbool_t *ret_did_protect, unsigned flags) { - haddr_t iblock_addr; /* Indirect block's address */ - H5HF_indirect_t *iblock; /* Pointer to indirect block */ - hbool_t did_protect; /* Whether we protected the indirect block or not */ - unsigned row, col; /* Row & column for object's block */ - unsigned entry; /* Entry of block */ - herr_t ret_value = SUCCEED; /* Return value */ + haddr_t iblock_addr; /* Indirect block's address */ + H5HF_indirect_t *iblock; /* Pointer to indirect block */ + hbool_t did_protect; /* Whether we protected the indirect block or not */ + unsigned row, col; /* Row & column for object's block */ + unsigned entry; /* Entry of block */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -533,7 +525,7 @@ H5HF__man_dblock_locate(H5HF_hdr_t *hdr, hsize_t obj_off, * Check arguments. */ HDassert(hdr); - HDassert(hdr->man_dtable.curr_root_rows); /* Only works for heaps with indirect root block */ + HDassert(hdr->man_dtable.curr_root_rows); /* Only works for heaps with indirect root block */ HDassert(ret_iblock); HDassert(ret_did_protect); @@ -541,26 +533,27 @@ H5HF__man_dblock_locate(H5HF_hdr_t *hdr, hsize_t obj_off, HDassert((flags & (unsigned)(~H5AC__READ_ONLY_FLAG)) == 0); /* Look up row & column for object */ - if(H5HF_dtable_lookup(&hdr->man_dtable, obj_off, &row, &col) < 0) + if (H5HF_dtable_lookup(&hdr->man_dtable, obj_off, &row, &col) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPUTE, FAIL, "can't compute row & column of object") /* Set initial indirect block info */ iblock_addr = hdr->man_dtable.table_addr; /* Lock root indirect block */ - if(NULL == (iblock = H5HF__man_iblock_protect(hdr, iblock_addr, hdr->man_dtable.curr_root_rows, NULL, 0, FALSE, flags, &did_protect))) + if (NULL == (iblock = H5HF__man_iblock_protect(hdr, iblock_addr, hdr->man_dtable.curr_root_rows, NULL, 0, + FALSE, flags, &did_protect))) HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect fractal heap indirect block") /* Check for indirect block row */ - while(row >= hdr->man_dtable.max_direct_rows) { - H5HF_indirect_t *new_iblock; /* Pointer to new indirect block */ - hbool_t new_did_protect; /* Whether we protected the indirect block or not */ - unsigned nrows; /* Number of rows in new indirect block */ - unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting parent indirect block */ + while (row >= hdr->man_dtable.max_direct_rows) { + H5HF_indirect_t *new_iblock; /* Pointer to new indirect block */ + hbool_t new_did_protect; /* Whether we protected the indirect block or not */ + unsigned nrows; /* Number of rows in new indirect block */ + unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting parent indirect block */ /* Compute # of rows in child indirect block */ nrows = (H5VM_log2_gen(hdr->man_dtable.row_block_size[row]) - hdr->man_dtable.first_row_bits) + 1; - HDassert(nrows < iblock->nrows); /* child must be smaller than parent */ + HDassert(nrows < iblock->nrows); /* child must be smaller than parent */ /* Compute indirect block's entry */ entry = (row * hdr->man_dtable.cparam.width) + col; @@ -569,8 +562,8 @@ H5HF__man_dblock_locate(H5HF_hdr_t *hdr, hsize_t obj_off, iblock_addr = iblock->ents[entry].addr; /* Check if we need to (re-)create the child indirect block */ - if(!H5F_addr_defined(iblock_addr)) { - if(H5HF__man_iblock_create(hdr, iblock, entry, nrows, nrows, &iblock_addr) < 0) + if (!H5F_addr_defined(iblock_addr)) { + if (H5HF__man_iblock_create(hdr, iblock, entry, nrows, nrows, &iblock_addr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "can't allocate fractal heap indirect block") /* Indicate that the parent indirect block was modified */ @@ -578,34 +571,34 @@ H5HF__man_dblock_locate(H5HF_hdr_t *hdr, hsize_t obj_off, } /* end if */ /* Lock child indirect block */ - if(NULL == (new_iblock = H5HF__man_iblock_protect(hdr, iblock_addr, nrows, iblock, entry, FALSE, flags, &new_did_protect))) + if (NULL == (new_iblock = H5HF__man_iblock_protect(hdr, iblock_addr, nrows, iblock, entry, FALSE, + flags, &new_did_protect))) HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect fractal heap indirect block") /* Release the current indirect block */ - if(H5HF__man_iblock_unprotect(iblock, cache_flags, did_protect) < 0) + if (H5HF__man_iblock_unprotect(iblock, cache_flags, did_protect) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap indirect block") /* Switch variables to use new indirect block */ - iblock = new_iblock; + iblock = new_iblock; did_protect = new_did_protect; /* Look up row & column in new indirect block for object */ - if(H5HF_dtable_lookup(&hdr->man_dtable, (obj_off - iblock->block_off), &row, &col) < 0) + if (H5HF_dtable_lookup(&hdr->man_dtable, (obj_off - iblock->block_off), &row, &col) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTCOMPUTE, FAIL, "can't compute row & column of object") - HDassert(row < iblock->nrows); /* child must be smaller than parent */ - } /* end while */ + HDassert(row < iblock->nrows); /* child must be smaller than parent */ + } /* end while */ /* Set return parameters */ - if(ret_entry) + if (ret_entry) *ret_entry = (row * hdr->man_dtable.cparam.width) + col; - *ret_iblock = iblock; + *ret_iblock = iblock; *ret_did_protect = did_protect; done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__man_dblock_locate() */ - /*------------------------------------------------------------------------- * Function: H5HF__man_dblock_delete * @@ -626,8 +619,8 @@ done: herr_t H5HF__man_dblock_delete(H5F_t *f, haddr_t dblock_addr, hsize_t dblock_size) { - unsigned dblock_status = 0; /* Direct block's status in the metadata cache */ - herr_t ret_value = SUCCEED; /* Return value */ + unsigned dblock_status = 0; /* Direct block's status in the metadata cache */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -639,23 +632,23 @@ H5HF__man_dblock_delete(H5F_t *f, haddr_t dblock_addr, hsize_t dblock_size) HDassert(dblock_size > 0); /* Check the direct block's status in the metadata cache */ - if(H5AC_get_entry_status(f, dblock_addr, &dblock_status) < 0) + if (H5AC_get_entry_status(f, dblock_addr, &dblock_status) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to check metadata cache status for direct block") /* If the direct block is in the cache, expunge it now */ - if(dblock_status & H5AC_ES__IN_CACHE) { + if (dblock_status & H5AC_ES__IN_CACHE) { /* Sanity checks on direct block */ HDassert(!(dblock_status & H5AC_ES__IS_PINNED)); HDassert(!(dblock_status & H5AC_ES__IS_PROTECTED)); /* Evict the direct block from the metadata cache */ - if(H5AC_expunge_entry(f, H5AC_FHEAP_DBLOCK, dblock_addr, H5AC__NO_FLAGS_SET) < 0) + if (H5AC_expunge_entry(f, H5AC_FHEAP_DBLOCK, dblock_addr, H5AC__NO_FLAGS_SET) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTREMOVE, FAIL, "unable to remove direct block from cache") } /* end if */ /* Check if the direct block is NOT currently allocated in temp. file space */ /* (temp. file space does not need to be freed) */ - if(!H5F_IS_TMP_ADDR(f, dblock_addr)) + if (!H5F_IS_TMP_ADDR(f, dblock_addr)) /* Release direct block's disk space */ /* (XXX: Under the best of circumstances, this block's space in the file * would be freed in the H5AC_expunge_entry() call above (and the @@ -667,14 +660,13 @@ H5HF__man_dblock_delete(H5F_t *f, haddr_t dblock_addr, hsize_t dblock_size) * that would add a bunch of unnecessary overhead to the process, * so we just release the file space here, directly. -QAK) */ - if(H5MF_xfree(f, H5FD_MEM_FHEAP_DBLOCK, dblock_addr, dblock_size) < 0) + if (H5MF_xfree(f, H5FD_MEM_FHEAP_DBLOCK, dblock_addr, dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free fractal heap direct block file space") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__man_dblock_delete() */ - /*------------------------------------------------------------------------- * Function: H5HF_man_dblock_dest * @@ -690,7 +682,7 @@ done: herr_t H5HF_man_dblock_dest(H5HF_direct_t *dblock) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT @@ -701,11 +693,12 @@ H5HF_man_dblock_dest(H5HF_direct_t *dblock) /* Decrement reference count on shared fractal heap info */ HDassert(dblock->hdr != NULL); - if(H5HF_hdr_decr(dblock->hdr) < 0) + if (H5HF_hdr_decr(dblock->hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't decrement reference count on shared heap header") - if(dblock->parent) - if(H5HF__iblock_decr(dblock->parent) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't decrement reference count on shared indirect block") + if (dblock->parent) + if (H5HF__iblock_decr(dblock->parent) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, + "can't decrement reference count on shared indirect block") /* Free block's buffer */ dblock->blk = H5FL_BLK_FREE(direct_block, dblock->blk); @@ -716,4 +709,3 @@ H5HF_man_dblock_dest(H5HF_direct_t *dblock) done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF_man_dblock_dest() */ - |