diff options
Diffstat (limited to 'src/H5Faccum.c')
-rw-r--r-- | src/H5Faccum.c | 534 |
1 files changed, 270 insertions, 264 deletions
diff --git a/src/H5Faccum.c b/src/H5Faccum.c index 02f475d..a04da0e 100644 --- a/src/H5Faccum.c +++ b/src/H5Faccum.c @@ -28,29 +28,26 @@ /* Module Setup */ /****************/ -#include "H5Fmodule.h" /* This source code file is part of the H5F module */ - +#include "H5Fmodule.h" /* This source code file is part of the H5F module */ /***********/ /* Headers */ /***********/ -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5Fpkg.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5MMprivate.h" /* Memory management */ -#include "H5VMprivate.h" /* Vectors and arrays */ - +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5Fpkg.h" /* File access */ +#include "H5FDprivate.h" /* File drivers */ +#include "H5MMprivate.h" /* Memory management */ +#include "H5VMprivate.h" /* Vectors and arrays */ /****************/ /* Local Macros */ /****************/ /* Metadata accumulator controls */ -#define H5F_ACCUM_THROTTLE 8 -#define H5F_ACCUM_THRESHOLD 2048 -#define H5F_ACCUM_MAX_SIZE (1024 *1024) /* Max. accum. buf size (max. I/Os will be 1/2 this size) */ - +#define H5F_ACCUM_THROTTLE 8 +#define H5F_ACCUM_THRESHOLD 2048 +#define H5F_ACCUM_MAX_SIZE (1024 * 1024) /* Max. accum. buf size (max. I/Os will be 1/2 this size) */ /******************/ /* Local Typedefs */ @@ -58,31 +55,26 @@ /* Enumerated type to indicate how data will be added to accumulator */ typedef enum { - H5F_ACCUM_PREPEND, /* Data will be prepended to accumulator */ - H5F_ACCUM_APPEND /* Data will be appended to accumulator */ + H5F_ACCUM_PREPEND, /* Data will be prepended to accumulator */ + H5F_ACCUM_APPEND /* Data will be appended to accumulator */ } H5F_accum_adjust_t; - /********************/ /* Package Typedefs */ /********************/ - /********************/ /* Local Prototypes */ /********************/ - /*********************/ /* Package Variables */ /*********************/ - /*****************************/ /* Library Private Variables */ /*****************************/ - /*******************/ /* Local Variables */ /*******************/ @@ -90,8 +82,6 @@ typedef enum { /* Declare a PQ free list to manage the metadata accumulator buffer */ H5FL_BLK_DEFINE_STATIC(meta_accum); - - /*------------------------------------------------------------------------- * Function: H5F__accum_read * @@ -110,11 +100,10 @@ H5FL_BLK_DEFINE_STATIC(meta_accum); *------------------------------------------------------------------------- */ herr_t -H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, - size_t size, void *buf/*out*/) +H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, size_t size, void *buf /*out*/) { - H5FD_t *file; /* File driver pointer */ - herr_t ret_value = SUCCEED; /* Return value */ + H5FD_t *file; /* File driver pointer */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -126,38 +115,38 @@ H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, file = f_sh->lf; /* Check if this information is in the metadata accumulator */ - if((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) { - H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */ + if ((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) { + H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */ /* Set up alias for file's metadata accumulator info */ accum = &f_sh->accum; - if(size < H5F_ACCUM_MAX_SIZE) { + if (size < H5F_ACCUM_MAX_SIZE) { /* Sanity check */ HDassert(!accum->buf || (accum->alloc_size >= accum->size)); /* Current read adjoins or overlaps with metadata accumulator */ - if(H5F_addr_overlap(addr, size, accum->loc, accum->size) - || ((addr + size) == accum->loc) - || (accum->loc + accum->size) == addr) { - size_t amount_before; /* Amount to read before current accumulator */ - haddr_t new_addr; /* New address of the accumulator buffer */ - size_t new_size; /* New size of the accumulator buffer */ + if (H5F_addr_overlap(addr, size, accum->loc, accum->size) || ((addr + size) == accum->loc) || + (accum->loc + accum->size) == addr) { + size_t amount_before; /* Amount to read before current accumulator */ + haddr_t new_addr; /* New address of the accumulator buffer */ + size_t new_size; /* New size of the accumulator buffer */ /* Compute new values for accumulator */ new_addr = MIN(addr, accum->loc); new_size = (size_t)(MAX((addr + size), (accum->loc + accum->size)) - new_addr); /* Check if we need more buffer space */ - if(new_size > accum->alloc_size) { - size_t new_alloc_size; /* New size of accumulator */ + if (new_size > accum->alloc_size) { + size_t new_alloc_size; /* New size of accumulator */ /* Adjust the buffer size to be a power of 2 that is large enough to hold data */ new_alloc_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(new_size - 1))); /* Reallocate the metadata accumulator buffer */ - if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_alloc_size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") + if (NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_alloc_size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "unable to allocate metadata accumulator buffer") /* Note the new buffer size */ accum->alloc_size = new_alloc_size; @@ -167,7 +156,7 @@ H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, } /* end if */ /* Read the part before the metadata accumulator */ - if(addr < accum->loc) { + if (addr < accum->loc) { /* Set the amount to read */ H5_CHECKED_ASSIGN(amount_before, size_t, (accum->loc - addr), hsize_t); @@ -175,25 +164,27 @@ H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, HDmemmove(accum->buf + amount_before, accum->buf, accum->size); /* Adjust dirty region tracking info, if present */ - if(accum->dirty) + if (accum->dirty) accum->dirty_off += amount_before; /* Dispatch to driver */ - if(H5FD_read(file, map_type, addr, amount_before, accum->buf) < 0) + if (H5FD_read(file, map_type, addr, amount_before, accum->buf) < 0) HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed") } /* end if */ else amount_before = 0; /* Read the part after the metadata accumulator */ - if((addr + size) > (accum->loc + accum->size)) { - size_t amount_after; /* Amount to read at a time */ + if ((addr + size) > (accum->loc + accum->size)) { + size_t amount_after; /* Amount to read at a time */ /* Set the amount to read */ - H5_CHECKED_ASSIGN(amount_after, size_t, ((addr + size) - (accum->loc + accum->size)), hsize_t); + H5_CHECKED_ASSIGN(amount_after, size_t, ((addr + size) - (accum->loc + accum->size)), + hsize_t); /* Dispatch to driver */ - if(H5FD_read(file, map_type, (accum->loc + accum->size), amount_after, (accum->buf + accum->size + amount_before)) < 0) + if (H5FD_read(file, map_type, (accum->loc + accum->size), amount_after, + (accum->buf + accum->size + amount_before)) < 0) HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed") } /* end if */ @@ -201,19 +192,19 @@ H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, H5MM_memcpy(buf, accum->buf + (addr - new_addr), size); /* Adjust the accumulator address & size */ - accum->loc = new_addr; + accum->loc = new_addr; accum->size = new_size; } /* end if */ /* Current read doesn't overlap with metadata accumulator, read it from file */ else { /* Dispatch to driver */ - if(H5FD_read(file, map_type, addr, size, buf) < 0) + if (H5FD_read(file, map_type, addr, size, buf) < 0) HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed") } /* end else */ - } /* end if */ + } /* end if */ else { /* Read the data */ - if(H5FD_read(file, map_type, addr, size, buf) < 0) + if (H5FD_read(file, map_type, addr, size, buf) < 0) HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed") /* Check for overlap w/dirty accumulator */ @@ -221,15 +212,15 @@ H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, * information in the accumulator with [some of] the information * just read in. -QAK) */ - if(accum->dirty && - H5F_addr_overlap(addr, size, accum->loc + accum->dirty_off, accum->dirty_len)) { - haddr_t dirty_loc = accum->loc + accum->dirty_off; /* File offset of dirty information */ - size_t buf_off; /* Offset of dirty region in buffer */ - size_t dirty_off; /* Offset within dirty region */ - size_t overlap_size; /* Size of overlap with dirty region */ + if (accum->dirty && + H5F_addr_overlap(addr, size, accum->loc + accum->dirty_off, accum->dirty_len)) { + haddr_t dirty_loc = accum->loc + accum->dirty_off; /* File offset of dirty information */ + size_t buf_off; /* Offset of dirty region in buffer */ + size_t dirty_off; /* Offset within dirty region */ + size_t overlap_size; /* Size of overlap with dirty region */ /* Check for read starting before beginning dirty region */ - if(H5F_addr_le(addr, dirty_loc)) { + if (H5F_addr_le(addr, dirty_loc)) { /* Compute offset of dirty region within buffer */ buf_off = (size_t)(dirty_loc - addr); @@ -237,26 +228,27 @@ H5F__accum_read(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, dirty_off = 0; /* Check for read ending within dirty region */ - if(H5F_addr_lt(addr + size, dirty_loc + accum->dirty_len)) + if (H5F_addr_lt(addr + size, dirty_loc + accum->dirty_len)) overlap_size = (size_t)((addr + size) - buf_off); - else /* Access covers whole dirty region */ + else /* Access covers whole dirty region */ overlap_size = accum->dirty_len; - } /* end if */ + } /* end if */ else { /* Read starts after beginning of dirty region */ /* Compute dirty offset within buffer and overlap size */ - buf_off = 0; - dirty_off = (size_t)(addr - dirty_loc); + buf_off = 0; + dirty_off = (size_t)(addr - dirty_loc); overlap_size = (size_t)((dirty_loc + accum->dirty_len) - addr); } /* end else */ /* Copy the dirty region to buffer */ - H5MM_memcpy((unsigned char *)buf + buf_off, (unsigned char *)accum->buf + accum->dirty_off + dirty_off, overlap_size); + H5MM_memcpy((unsigned char *)buf + buf_off, + (unsigned char *)accum->buf + accum->dirty_off + dirty_off, overlap_size); } /* end if */ - } /* end else */ - } /* end if */ + } /* end else */ + } /* end if */ else { /* Read the data */ - if(H5FD_read(file, map_type, addr, size, buf) < 0) + if (H5FD_read(file, map_type, addr, size, buf) < 0) HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "driver read request failed") } /* end else */ @@ -264,7 +256,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5F__accum_read() */ - /*------------------------------------------------------------------------- * Function: H5F__accum_adjust * @@ -278,10 +269,9 @@ done: *------------------------------------------------------------------------- */ static herr_t -H5F__accum_adjust(H5F_meta_accum_t *accum, H5FD_t *file, - H5F_accum_adjust_t adjust, size_t size) +H5F__accum_adjust(H5F_meta_accum_t *accum, H5FD_t *file, H5F_accum_adjust_t adjust, size_t size) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_STATIC @@ -292,70 +282,75 @@ H5F__accum_adjust(H5F_meta_accum_t *accum, H5FD_t *file, HDassert(size <= H5F_ACCUM_MAX_SIZE); /* Check if we need more buffer space */ - if((size + accum->size) > accum->alloc_size) { - size_t new_size; /* New size of accumulator */ + if ((size + accum->size) > accum->alloc_size) { + size_t new_size; /* New size of accumulator */ /* Adjust the buffer size to be a power of 2 that is large enough to hold data */ new_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)((size + accum->size) - 1))); /* Check for accumulator getting too big */ - if(new_size > H5F_ACCUM_MAX_SIZE) { - size_t shrink_size; /* Amount to shrink accumulator by */ - size_t remnant_size; /* Amount left in accumulator */ + if (new_size > H5F_ACCUM_MAX_SIZE) { + size_t shrink_size; /* Amount to shrink accumulator by */ + size_t remnant_size; /* Amount left in accumulator */ /* Cap the accumulator's growth, leaving some room */ /* Determine the amounts to work with */ - if(size > (H5F_ACCUM_MAX_SIZE / 2)) { - new_size = H5F_ACCUM_MAX_SIZE; - shrink_size = accum->size; + if (size > (H5F_ACCUM_MAX_SIZE / 2)) { + new_size = H5F_ACCUM_MAX_SIZE; + shrink_size = accum->size; remnant_size = 0; } /* end if */ else { - if(H5F_ACCUM_PREPEND == adjust) { - new_size = (H5F_ACCUM_MAX_SIZE / 2); - shrink_size = (H5F_ACCUM_MAX_SIZE / 2); + if (H5F_ACCUM_PREPEND == adjust) { + new_size = (H5F_ACCUM_MAX_SIZE / 2); + shrink_size = (H5F_ACCUM_MAX_SIZE / 2); remnant_size = accum->size - shrink_size; } /* end if */ else { size_t adjust_size = size + accum->dirty_len; /* Check if we can slide the dirty region down, to accommodate the request */ - if(accum->dirty && (adjust_size <= H5F_ACCUM_MAX_SIZE)) { - if((ssize_t)(H5F_ACCUM_MAX_SIZE - (accum->dirty_off + adjust_size)) >= (ssize_t)(2 * size)) + if (accum->dirty && (adjust_size <= H5F_ACCUM_MAX_SIZE)) { + if ((ssize_t)(H5F_ACCUM_MAX_SIZE - (accum->dirty_off + adjust_size)) >= + (ssize_t)(2 * size)) shrink_size = accum->dirty_off / 2; else shrink_size = accum->dirty_off; remnant_size = accum->size - shrink_size; - new_size = remnant_size + size; + new_size = remnant_size + size; } /* end if */ else { - new_size = (H5F_ACCUM_MAX_SIZE / 2); - shrink_size = (H5F_ACCUM_MAX_SIZE / 2); + new_size = (H5F_ACCUM_MAX_SIZE / 2); + shrink_size = (H5F_ACCUM_MAX_SIZE / 2); remnant_size = accum->size - shrink_size; } /* end else */ - } /* end else */ - } /* end else */ + } /* end else */ + } /* end else */ /* Check if we need to flush accumulator data to file */ - if(accum->dirty) { + if (accum->dirty) { /* Check whether to accumulator will be prepended or appended */ - if(H5F_ACCUM_PREPEND == adjust) { + if (H5F_ACCUM_PREPEND == adjust) { /* Check if the dirty region overlaps the region to eliminate from the accumulator */ - if((accum->size - shrink_size) < (accum->dirty_off + accum->dirty_len)) { - /* Write out the dirty region from the metadata accumulator, with dispatch to driver */ - if(H5FD_write(file, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), accum->dirty_len, (accum->buf + accum->dirty_off)) < 0) + if ((accum->size - shrink_size) < (accum->dirty_off + accum->dirty_len)) { + /* Write out the dirty region from the metadata accumulator, with dispatch to driver + */ + if (H5FD_write(file, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), + accum->dirty_len, (accum->buf + accum->dirty_off)) < 0) HGOTO_ERROR(H5E_FILE, H5E_WRITEERROR, FAIL, "file write failed") /* Reset accumulator dirty flag */ accum->dirty = FALSE; } /* end if */ - } /* end if */ + } /* end if */ else { /* Check if the dirty region overlaps the region to eliminate from the accumulator */ - if(shrink_size > accum->dirty_off) { - /* Write out the dirty region from the metadata accumulator, with dispatch to driver */ - if(H5FD_write(file, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), accum->dirty_len, (accum->buf + accum->dirty_off)) < 0) + if (shrink_size > accum->dirty_off) { + /* Write out the dirty region from the metadata accumulator, with dispatch to driver + */ + if (H5FD_write(file, H5FD_MEM_DEFAULT, (accum->loc + accum->dirty_off), + accum->dirty_len, (accum->buf + accum->dirty_off)) < 0) HGOTO_ERROR(H5E_FILE, H5E_WRITEERROR, FAIL, "file write failed") /* Reset accumulator dirty flag */ @@ -365,43 +360,42 @@ H5F__accum_adjust(H5F_meta_accum_t *accum, H5FD_t *file, /* Adjust dirty region tracking info */ accum->dirty_off -= shrink_size; } /* end else */ - } /* end if */ + } /* end if */ /* Trim the accumulator's use of its buffer */ accum->size = remnant_size; /* When appending, need to adjust location of accumulator */ - if(H5F_ACCUM_APPEND == adjust) { + if (H5F_ACCUM_APPEND == adjust) { /* Move remnant of accumulator down */ HDmemmove(accum->buf, (accum->buf + shrink_size), remnant_size); /* Adjust accumulator's location */ accum->loc += shrink_size; } /* end if */ - } /* end if */ + } /* end if */ /* Check for accumulator needing to be reallocated */ - if(new_size > accum->alloc_size) { - unsigned char *new_buf; /* New buffer to hold the accumulated metadata */ + if (new_size > accum->alloc_size) { + unsigned char *new_buf; /* New buffer to hold the accumulated metadata */ /* Reallocate the metadata accumulator buffer */ - if(NULL == (new_buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size))) + if (NULL == (new_buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size))) HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "unable to allocate metadata accumulator buffer") /* Update accumulator info */ - accum->buf = new_buf; + accum->buf = new_buf; accum->alloc_size = new_size; /* Clear the memory */ HDmemset(accum->buf + accum->size, 0, (accum->alloc_size - (accum->size + size))); } /* end if */ - } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5F__accum_adjust() */ - /*------------------------------------------------------------------------- * Function: H5F__accum_write * @@ -416,11 +410,10 @@ done: *------------------------------------------------------------------------- */ herr_t -H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, - size_t size, const void *buf) +H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, size_t size, const void *buf) { - H5FD_t *file; /* File driver pointer */ - herr_t ret_value = SUCCEED; /* Return value */ + H5FD_t *file; /* File driver pointer */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) @@ -433,22 +426,22 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, file = f_sh->lf; /* Check for accumulating metadata */ - if((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) { - H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */ + if ((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && map_type != H5FD_MEM_DRAW) { + H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */ /* Set up alias for file's metadata accumulator info */ accum = &f_sh->accum; - if(size < H5F_ACCUM_MAX_SIZE) { + if (size < H5F_ACCUM_MAX_SIZE) { /* Sanity check */ HDassert(!accum->buf || (accum->alloc_size >= accum->size)); /* Check if there is already metadata in the accumulator */ - if(accum->size > 0) { + if (accum->size > 0) { /* Check if the new metadata adjoins the beginning of the current accumulator */ - if((addr + size) == accum->loc) { + if ((addr + size) == accum->loc) { /* Check if we need to adjust accumulator size */ - if(H5F__accum_adjust(accum, file, H5F_ACCUM_PREPEND, size) < 0) + if (H5F__accum_adjust(accum, file, H5F_ACCUM_PREPEND, size) < 0) HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator") /* Move the existing metadata to the proper location */ @@ -462,78 +455,79 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, accum->size += size; /* Adjust the dirty region and mark accumulator dirty */ - if(accum->dirty) + if (accum->dirty) accum->dirty_len = size + accum->dirty_off + accum->dirty_len; else { accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ accum->dirty_off = 0; } /* end if */ /* Check if the new metadata adjoins the end of the current accumulator */ - else if(addr == (accum->loc + accum->size)) { + else if (addr == (accum->loc + accum->size)) { /* Check if we need to adjust accumulator size */ - if(H5F__accum_adjust(accum, file, H5F_ACCUM_APPEND, size) < 0) + if (H5F__accum_adjust(accum, file, H5F_ACCUM_APPEND, size) < 0) HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator") /* Copy the new metadata to the end */ H5MM_memcpy(accum->buf + accum->size, buf, size); /* Adjust the dirty region and mark accumulator dirty */ - if(accum->dirty) + if (accum->dirty) accum->dirty_len = size + (accum->size - accum->dirty_off); else { accum->dirty_off = accum->size; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ /* Set the new size of the metadata accumulator */ accum->size += size; } /* end if */ /* Check if the piece of metadata being written overlaps the metadata accumulator */ - else if(H5F_addr_overlap(addr, size, accum->loc, accum->size)) { - size_t add_size; /* New size of the accumulator buffer */ + else if (H5F_addr_overlap(addr, size, accum->loc, accum->size)) { + size_t add_size; /* New size of the accumulator buffer */ /* Check if the new metadata is entirely within the current accumulator */ - if(addr >= accum->loc && (addr + size) <= (accum->loc + accum->size)) { + if (addr >= accum->loc && (addr + size) <= (accum->loc + accum->size)) { size_t dirty_off = (size_t)(addr - accum->loc); /* Copy the new metadata to the proper location within the accumulator */ H5MM_memcpy(accum->buf + dirty_off, buf, size); /* Adjust the dirty region and mark accumulator dirty */ - if(accum->dirty) { + if (accum->dirty) { /* Check for new metadata starting before current dirty region */ - if(dirty_off <= accum->dirty_off) { - if((dirty_off + size) <= (accum->dirty_off + accum->dirty_len)) + if (dirty_off <= accum->dirty_off) { + if ((dirty_off + size) <= (accum->dirty_off + accum->dirty_len)) accum->dirty_len = (accum->dirty_off + accum->dirty_len) - dirty_off; else accum->dirty_len = size; accum->dirty_off = dirty_off; } /* end if */ else { - if((dirty_off + size) <= (accum->dirty_off + accum->dirty_len)) + if ((dirty_off + size) <= (accum->dirty_off + accum->dirty_len)) ; /* accum->dirty_len doesn't change */ else accum->dirty_len = (dirty_off + size) - accum->dirty_off; } /* end else */ - } /* end if */ + } /* end if */ else { accum->dirty_off = dirty_off; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ - } /* end if */ + } /* end if */ /* Check if the new metadata overlaps the beginning of the current accumulator */ - else if(addr < accum->loc && (addr + size) <= (accum->loc + accum->size)) { - size_t old_offset; /* Offset of old data within the accumulator buffer */ + else if (addr < accum->loc && (addr + size) <= (accum->loc + accum->size)) { + size_t old_offset; /* Offset of old data within the accumulator buffer */ - /* Calculate the amount we will need to add to the accumulator size, based on the amount of overlap */ + /* Calculate the amount we will need to add to the accumulator size, based on the + * amount of overlap */ H5_CHECKED_ASSIGN(add_size, size_t, (accum->loc - addr), hsize_t); /* Check if we need to adjust accumulator size */ - if(H5F__accum_adjust(accum, file, H5F_ACCUM_PREPEND, add_size) < 0) + if (H5F__accum_adjust(accum, file, H5F_ACCUM_PREPEND, add_size) < 0) HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator") /* Calculate the proper offset of the existing metadata */ @@ -550,11 +544,11 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, accum->size += add_size; /* Adjust the dirty region and mark accumulator dirty */ - if(accum->dirty) { + if (accum->dirty) { size_t curr_dirty_end = add_size + accum->dirty_off + accum->dirty_len; accum->dirty_off = 0; - if(size <= curr_dirty_end) + if (size <= curr_dirty_end) accum->dirty_len = curr_dirty_end; else accum->dirty_len = size; @@ -562,18 +556,20 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, else { accum->dirty_off = 0; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ - } /* end if */ + } /* end if */ /* Check if the new metadata overlaps the end of the current accumulator */ - else if(addr >= accum->loc && (addr + size) > (accum->loc + accum->size)) { - size_t dirty_off; /* Offset of dirty region */ + else if (addr >= accum->loc && (addr + size) > (accum->loc + accum->size)) { + size_t dirty_off; /* Offset of dirty region */ - /* Calculate the amount we will need to add to the accumulator size, based on the amount of overlap */ - H5_CHECKED_ASSIGN(add_size, size_t, (addr + size) - (accum->loc + accum->size), hsize_t); + /* Calculate the amount we will need to add to the accumulator size, based on the + * amount of overlap */ + H5_CHECKED_ASSIGN(add_size, size_t, (addr + size) - (accum->loc + accum->size), + hsize_t); /* Check if we need to adjust accumulator size */ - if(H5F__accum_adjust(accum, file, H5F_ACCUM_APPEND, add_size) < 0) + if (H5F__accum_adjust(accum, file, H5F_ACCUM_APPEND, add_size) < 0) HGOTO_ERROR(H5E_IO, H5E_CANTRESIZE, FAIL, "can't adjust metadata accumulator") /* Compute offset of dirty region (after adjusting accumulator) */ @@ -586,34 +582,36 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, accum->size += add_size; /* Adjust the dirty region and mark accumulator dirty */ - if(accum->dirty) { + if (accum->dirty) { /* Check for new metadata starting before current dirty region */ - if(dirty_off <= accum->dirty_off) { + if (dirty_off <= accum->dirty_off) { accum->dirty_off = dirty_off; accum->dirty_len = size; } /* end if */ else { accum->dirty_len = (dirty_off + size) - accum->dirty_off; } /* end else */ - } /* end if */ + } /* end if */ else { accum->dirty_off = dirty_off; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ - } /* end if */ + } /* end if */ /* New metadata overlaps both ends of the current accumulator */ else { /* Check if we need more buffer space */ - if(size > accum->alloc_size) { - size_t new_alloc_size; /* New size of accumulator */ + if (size > accum->alloc_size) { + size_t new_alloc_size; /* New size of accumulator */ /* Adjust the buffer size to be a power of 2 that is large enough to hold data */ new_alloc_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1))); /* Reallocate the metadata accumulator buffer */ - if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_alloc_size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") + if (NULL == + (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_alloc_size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "unable to allocate metadata accumulator buffer") /* Note the new buffer size */ accum->alloc_size = new_alloc_size; @@ -626,20 +624,21 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, H5MM_memcpy(accum->buf, buf, size); /* Set the new size & location of the metadata accumulator */ - accum->loc = addr; + accum->loc = addr; accum->size = size; /* Adjust the dirty region and mark accumulator dirty */ accum->dirty_off = 0; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ - } /* end if */ + } /* end if */ /* New piece of metadata doesn't adjoin or overlap the existing accumulator */ else { /* Write out the existing metadata accumulator, with dispatch to driver */ - if(accum->dirty) { - if(H5FD_write(file, H5FD_MEM_DEFAULT, accum->loc + accum->dirty_off, accum->dirty_len, accum->buf + accum->dirty_off) < 0) + if (accum->dirty) { + if (H5FD_write(file, H5FD_MEM_DEFAULT, accum->loc + accum->dirty_off, + accum->dirty_len, accum->buf + accum->dirty_off) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") /* Reset accumulator dirty flag */ @@ -648,16 +647,17 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, /* Cache the new piece of metadata */ /* Check if we need to resize the buffer */ - if(size > accum->alloc_size) { - size_t new_size; /* New size of accumulator */ - size_t clear_size; /* Size of memory that needs clearing */ + if (size > accum->alloc_size) { + size_t new_size; /* New size of accumulator */ + size_t clear_size; /* Size of memory that needs clearing */ /* Adjust the buffer size to be a power of 2 that is large enough to hold data */ new_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1))); /* Grow the metadata accumulator buffer */ - if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") + if (NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "unable to allocate metadata accumulator buffer") /* Note the new buffer size */ accum->alloc_size = new_size; @@ -668,21 +668,23 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, } /* end if */ else { /* Check if we should shrink the accumulator buffer */ - if(size < (accum->alloc_size / H5F_ACCUM_THROTTLE) && - accum->alloc_size > H5F_ACCUM_THRESHOLD) { - size_t tmp_size = (accum->alloc_size / H5F_ACCUM_THROTTLE); /* New size of accumulator buffer */ + if (size < (accum->alloc_size / H5F_ACCUM_THROTTLE) && + accum->alloc_size > H5F_ACCUM_THRESHOLD) { + size_t tmp_size = + (accum->alloc_size / H5F_ACCUM_THROTTLE); /* New size of accumulator buffer */ /* Shrink the accumulator buffer */ - if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, tmp_size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") + if (NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, tmp_size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "unable to allocate metadata accumulator buffer") /* Note the new buffer size */ accum->alloc_size = tmp_size; } /* end if */ - } /* end else */ + } /* end else */ /* Update the metadata accumulator information */ - accum->loc = addr; + accum->loc = addr; accum->size = size; /* Store the piece of metadata in the accumulator */ @@ -691,21 +693,22 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, /* Adjust the dirty region and mark accumulator dirty */ accum->dirty_off = 0; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ - } /* end if */ + } /* end if */ /* No metadata in the accumulator, grab this piece and keep it */ else { /* Check if we need to reallocate the buffer */ - if(size > accum->alloc_size) { - size_t new_size; /* New size of accumulator */ + if (size > accum->alloc_size) { + size_t new_size; /* New size of accumulator */ /* Adjust the buffer size to be a power of 2 that is large enough to hold data */ new_size = (size_t)1 << (1 + H5VM_log2_gen((uint64_t)(size - 1))); /* Reallocate the metadata accumulator buffer */ - if(NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") + if (NULL == (accum->buf = H5FL_BLK_REALLOC(meta_accum, accum->buf, new_size))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, + "unable to allocate metadata accumulator buffer") /* Note the new buffer size */ accum->alloc_size = new_size; @@ -715,7 +718,7 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, } /* end if */ /* Update the metadata accumulator information */ - accum->loc = addr; + accum->loc = addr; accum->size = size; /* Store the piece of metadata in the accumulator */ @@ -724,68 +727,70 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, /* Adjust the dirty region and mark accumulator dirty */ accum->dirty_off = 0; accum->dirty_len = size; - accum->dirty = TRUE; + accum->dirty = TRUE; } /* end else */ - } /* end if */ + } /* end if */ else { /* Make certain that data in accumulator is visible before new write */ - if((H5F_SHARED_INTENT(f_sh) & H5F_ACC_SWMR_WRITE) > 0) + if ((H5F_SHARED_INTENT(f_sh) & H5F_ACC_SWMR_WRITE) > 0) /* Flush if dirty and reset accumulator */ - if(H5F__accum_reset(f_sh, TRUE) < 0) + if (H5F__accum_reset(f_sh, TRUE) < 0) HGOTO_ERROR(H5E_IO, H5E_CANTRESET, FAIL, "can't reset accumulator") /* Write the data */ - if(H5FD_write(file, map_type, addr, size, buf) < 0) + if (H5FD_write(file, map_type, addr, size, buf) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") /* Check for overlap w/accumulator */ /* (Note that this could be improved by updating the accumulator * with [some of] the information just read in. -QAK) */ - if(H5F_addr_overlap(addr, size, accum->loc, accum->size)) { + if (H5F_addr_overlap(addr, size, accum->loc, accum->size)) { /* Check for write starting before beginning of accumulator */ - if(H5F_addr_le(addr, accum->loc)) { + if (H5F_addr_le(addr, accum->loc)) { /* Check for write ending within accumulator */ - if(H5F_addr_le(addr + size, accum->loc + accum->size)) { - size_t overlap_size; /* Size of overlapping region */ + if (H5F_addr_le(addr + size, accum->loc + accum->size)) { + size_t overlap_size; /* Size of overlapping region */ /* Compute overlap size */ overlap_size = (size_t)((addr + size) - accum->loc); /* Check for dirty region */ - if(accum->dirty) { - haddr_t dirty_start = accum->loc + accum->dirty_off; /* File address of start of dirty region */ - haddr_t dirty_end = dirty_start + accum->dirty_len; /* File address of end of dirty region */ + if (accum->dirty) { + haddr_t dirty_start = + accum->loc + accum->dirty_off; /* File address of start of dirty region */ + haddr_t dirty_end = + dirty_start + accum->dirty_len; /* File address of end of dirty region */ /* Check if entire dirty region is overwritten */ - if(H5F_addr_le(dirty_end, addr + size)) { - accum->dirty = FALSE; + if (H5F_addr_le(dirty_end, addr + size)) { + accum->dirty = FALSE; accum->dirty_len = 0; } /* end if */ else { /* Check for dirty region falling after write */ - if(H5F_addr_le(addr + size, dirty_start)) + if (H5F_addr_le(addr + size, dirty_start)) accum->dirty_off = overlap_size; - else { /* Dirty region overlaps w/written region */ + else { /* Dirty region overlaps w/written region */ accum->dirty_off = 0; accum->dirty_len -= (size_t)((addr + size) - dirty_start); } /* end else */ - } /* end if */ - } /* end if */ + } /* end if */ + } /* end if */ /* Trim bottom of accumulator off */ accum->loc += overlap_size; accum->size -= overlap_size; HDmemmove(accum->buf, accum->buf + overlap_size, accum->size); - } /* end if */ - else { /* Access covers whole accumulator */ + } /* end if */ + else { /* Access covers whole accumulator */ /* Reset accumulator, but don't flush */ - if(H5F__accum_reset(f_sh, FALSE) < 0) + if (H5F__accum_reset(f_sh, FALSE) < 0) HGOTO_ERROR(H5E_IO, H5E_CANTRESET, FAIL, "can't reset accumulator") - } /* end else */ - } /* end if */ - else { /* Write starts after beginning of accumulator */ - size_t overlap_size; /* Size of overlapping region */ + } /* end else */ + } /* end if */ + else { /* Write starts after beginning of accumulator */ + size_t overlap_size; /* Size of overlapping region */ /* Sanity check */ HDassert(H5F_addr_gt(addr + size, accum->loc + accum->size)); @@ -794,33 +799,35 @@ H5F__accum_write(H5F_shared_t *f_sh, H5FD_mem_t map_type, haddr_t addr, overlap_size = (size_t)((accum->loc + accum->size) - addr); /* Check for dirty region */ - if(accum->dirty) { - haddr_t dirty_start = accum->loc + accum->dirty_off; /* File address of start of dirty region */ - haddr_t dirty_end = dirty_start + accum->dirty_len; /* File address of end of dirty region */ + if (accum->dirty) { + haddr_t dirty_start = + accum->loc + accum->dirty_off; /* File address of start of dirty region */ + haddr_t dirty_end = + dirty_start + accum->dirty_len; /* File address of end of dirty region */ /* Check if entire dirty region is overwritten */ - if(H5F_addr_ge(dirty_start, addr)) { - accum->dirty = FALSE; + if (H5F_addr_ge(dirty_start, addr)) { + accum->dirty = FALSE; accum->dirty_len = 0; } /* end if */ else { /* Check for dirty region falling before write */ - if(H5F_addr_le(dirty_end, addr)) + if (H5F_addr_le(dirty_end, addr)) ; /* noop */ - else /* Dirty region overlaps w/written region */ + else /* Dirty region overlaps w/written region */ accum->dirty_len = (size_t)(addr - dirty_start); } /* end if */ - } /* end if */ + } /* end if */ /* Trim top of accumulator off */ accum->size -= overlap_size; } /* end else */ - } /* end if */ - } /* end else */ - } /* end if */ + } /* end if */ + } /* end else */ + } /* end if */ else { /* Write the data */ - if(H5FD_write(file, map_type, addr, size, buf) < 0) + if (H5FD_write(file, map_type, addr, size, buf) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") } /* end else */ @@ -828,7 +835,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5F__accum_write() */ - /*------------------------------------------------------------------------- * Function: H5F__accum_free * @@ -843,12 +849,11 @@ done: *------------------------------------------------------------------------- */ herr_t -H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr, - hsize_t size) +H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr, hsize_t size) { - H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */ - H5FD_t *file; /* File driver pointer */ - herr_t ret_value = SUCCEED; /* Return value */ + H5F_meta_accum_t *accum; /* Alias for file's metadata accumulator */ + H5FD_t * file; /* File driver pointer */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -862,9 +867,9 @@ H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr file = f_sh->lf; /* Adjust the metadata accumulator to remove the freed block, if it overlaps */ - if((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) - && H5F_addr_overlap(addr, size, accum->loc, accum->size)) { - size_t overlap_size; /* Size of overlap with accumulator */ + if ((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && + H5F_addr_overlap(addr, size, accum->loc, accum->size)) { + size_t overlap_size; /* Size of overlap with accumulator */ /* Sanity check */ /* (The metadata accumulator should not intersect w/raw data */ @@ -872,17 +877,17 @@ H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr HDassert(H5FD_MEM_GHEAP != type); /* (global heap data is being treated as raw data currently) */ /* Check for overlapping the beginning of the accumulator */ - if(H5F_addr_le(addr, accum->loc)) { + if (H5F_addr_le(addr, accum->loc)) { /* Check for completely overlapping the accumulator */ - if(H5F_addr_ge(addr + size, accum->loc + accum->size)) { + if (H5F_addr_ge(addr + size, accum->loc + accum->size)) { /* Reset the accumulator, but don't free buffer */ - accum->loc = HADDR_UNDEF; - accum->size = 0; + accum->loc = HADDR_UNDEF; + accum->size = 0; accum->dirty = FALSE; } /* end if */ /* Block to free must end within the accumulator */ else { - size_t new_accum_size; /* Size of new accumulator buffer */ + size_t new_accum_size; /* Size of new accumulator buffer */ /* Calculate the size of the overlap with the accumulator, etc. */ H5_CHECKED_ASSIGN(overlap_size, size_t, (addr + size) - accum->loc, haddr_t); @@ -896,13 +901,13 @@ H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr accum->size = new_accum_size; /* Adjust the dirty region and possibly mark accumulator clean */ - if(accum->dirty) { + if (accum->dirty) { /* Check if block freed is entirely before dirty region */ - if(overlap_size < accum->dirty_off) + if (overlap_size < accum->dirty_off) accum->dirty_off -= overlap_size; else { /* Check if block freed ends within dirty region */ - if(overlap_size < (accum->dirty_off + accum->dirty_len)) { + if (overlap_size < (accum->dirty_off + accum->dirty_len)) { accum->dirty_len = (accum->dirty_off + accum->dirty_len) - overlap_size; accum->dirty_off = 0; } /* end if */ @@ -910,45 +915,47 @@ H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr else accum->dirty = FALSE; } /* end else */ - } /* end if */ - } /* end else */ - } /* end if */ + } /* end if */ + } /* end else */ + } /* end if */ /* Block to free must start within the accumulator */ else { - haddr_t dirty_end = accum->loc + accum->dirty_off + accum->dirty_len; + haddr_t dirty_end = accum->loc + accum->dirty_off + accum->dirty_len; haddr_t dirty_start = accum->loc + accum->dirty_off; /* Calculate the size of the overlap with the accumulator */ H5_CHECKED_ASSIGN(overlap_size, size_t, (accum->loc + accum->size) - addr, haddr_t); /* Check if block to free begins before end of dirty region */ - if(accum->dirty && H5F_addr_lt(addr, dirty_end)) { + if (accum->dirty && H5F_addr_lt(addr, dirty_end)) { haddr_t tail_addr; /* Calculate the address of the tail to write */ tail_addr = addr + size; /* Check if the block to free begins before dirty region */ - if(H5F_addr_lt(addr, dirty_start)) { + if (H5F_addr_lt(addr, dirty_start)) { /* Check if block to free is entirely before dirty region */ - if(H5F_addr_le(tail_addr, dirty_start)) { + if (H5F_addr_le(tail_addr, dirty_start)) { /* Write out the entire dirty region of the accumulator */ - if(H5FD_write(file, H5FD_MEM_DEFAULT, dirty_start, accum->dirty_len, accum->buf + accum->dirty_off) < 0) + if (H5FD_write(file, H5FD_MEM_DEFAULT, dirty_start, accum->dirty_len, + accum->buf + accum->dirty_off) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") } /* end if */ /* Block to free overlaps with some/all of dirty region */ /* Check for unfreed dirty region to write */ - else if(H5F_addr_lt(tail_addr, dirty_end)) { + else if (H5F_addr_lt(tail_addr, dirty_end)) { size_t write_size; size_t dirty_delta; - write_size = (size_t)(dirty_end - tail_addr); + write_size = (size_t)(dirty_end - tail_addr); dirty_delta = accum->dirty_len - write_size; HDassert(write_size > 0); /* Write out the unfreed dirty region of the accumulator */ - if(H5FD_write(file, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, accum->buf + accum->dirty_off + dirty_delta) < 0) + if (H5FD_write(file, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, + accum->buf + accum->dirty_off + dirty_delta) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") } /* end if */ @@ -958,22 +965,23 @@ H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr /* Block to free begins at beginning of or in middle of dirty region */ else { /* Check if block to free ends before end of dirty region */ - if(H5F_addr_lt(tail_addr, dirty_end)) { + if (H5F_addr_lt(tail_addr, dirty_end)) { size_t write_size; size_t dirty_delta; - write_size = (size_t)(dirty_end - tail_addr); + write_size = (size_t)(dirty_end - tail_addr); dirty_delta = accum->dirty_len - write_size; HDassert(write_size > 0); /* Write out the unfreed end of the dirty region of the accumulator */ - if(H5FD_write(file, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, accum->buf + accum->dirty_off + dirty_delta) < 0) + if (H5FD_write(file, H5FD_MEM_DEFAULT, dirty_start + dirty_delta, write_size, + accum->buf + accum->dirty_off + dirty_delta) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") } /* end if */ /* Check for block to free beginning at same location as dirty region */ - if(H5F_addr_eq(addr, dirty_start)) { + if (H5F_addr_eq(addr, dirty_start)) { /* Reset dirty flag */ accum->dirty = FALSE; } /* end if */ @@ -981,20 +989,19 @@ H5F__accum_free(H5F_shared_t *f_sh, H5FD_mem_t H5_ATTR_UNUSED type, haddr_t addr else { accum->dirty_len = (size_t)(addr - dirty_start); } /* end else */ - } /* end else */ + } /* end else */ } /* end if */ /* Adjust the accumulator information */ accum->size = accum->size - overlap_size; } /* end else */ - } /* end if */ + } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5F__accum_free() */ - /*------------------------------------------------------------------------- * Function: H5F__accum_flush * @@ -1010,7 +1017,7 @@ done: herr_t H5F__accum_flush(H5F_shared_t *f_sh) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI(FAIL) @@ -1018,14 +1025,15 @@ H5F__accum_flush(H5F_shared_t *f_sh) HDassert(f_sh); /* Check if we need to flush out the metadata accumulator */ - if((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && f_sh->accum.dirty) { - H5FD_t *file; /* File driver pointer */ + if ((f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) && f_sh->accum.dirty) { + H5FD_t *file; /* File driver pointer */ /* Translate to file driver pointer */ file = f_sh->lf; /* Flush the metadata contents */ - if(H5FD_write(file, H5FD_MEM_DEFAULT, f_sh->accum.loc + f_sh->accum.dirty_off, f_sh->accum.dirty_len, f_sh->accum.buf + f_sh->accum.dirty_off) < 0) + if (H5FD_write(file, H5FD_MEM_DEFAULT, f_sh->accum.loc + f_sh->accum.dirty_off, f_sh->accum.dirty_len, + f_sh->accum.buf + f_sh->accum.dirty_off) < 0) HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed") /* Reset the dirty flag */ @@ -1036,7 +1044,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5F__accum_flush() */ - /*------------------------------------------------------------------------- * Function: H5F__accum_reset * @@ -1052,7 +1059,7 @@ done: herr_t H5F__accum_reset(H5F_shared_t *f_sh, hbool_t flush) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -1060,24 +1067,23 @@ H5F__accum_reset(H5F_shared_t *f_sh, hbool_t flush) HDassert(f_sh); /* Flush any dirty data in accumulator, if requested */ - if(flush) - if(H5F__accum_flush(f_sh) < 0) + if (flush) + if (H5F__accum_flush(f_sh) < 0) HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "can't flush metadata accumulator") /* Check if we need to reset the metadata accumulator information */ - if(f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) { + if (f_sh->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) { /* Free the buffer */ - if(f_sh->accum.buf) + if (f_sh->accum.buf) f_sh->accum.buf = H5FL_BLK_FREE(meta_accum, f_sh->accum.buf); /* Reset the buffer sizes & location */ f_sh->accum.alloc_size = f_sh->accum.size = 0; - f_sh->accum.loc = HADDR_UNDEF; - f_sh->accum.dirty = FALSE; - f_sh->accum.dirty_len = 0; + f_sh->accum.loc = HADDR_UNDEF; + f_sh->accum.dirty = FALSE; + f_sh->accum.dirty_len = 0; } /* end if */ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5F__accum_reset() */ - |