summaryrefslogtreecommitdiffstats
path: root/src/H5FDspace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5FDspace.c')
-rw-r--r--src/H5FDspace.c153
1 files changed, 69 insertions, 84 deletions
diff --git a/src/H5FDspace.c b/src/H5FDspace.c
index 22d7e22..38a96fb 100644
--- a/src/H5FDspace.c
+++ b/src/H5FDspace.c
@@ -26,20 +26,18 @@
/* Module Setup */
/****************/
-#include "H5FDmodule.h" /* This source code file is part of the H5FD module */
-
+#include "H5FDmodule.h" /* This source code file is part of the H5FD module */
/***********/
/* Headers */
/***********/
-#include "H5private.h" /* Generic Functions */
-#include "H5CXprivate.h" /* API Contexts */
-#include "H5Eprivate.h" /* Error handling */
-#include "H5Fprivate.h" /* File access */
-#include "H5FDpkg.h" /* File Drivers */
-#include "H5FDmulti.h" /* Usage-partitioned file family */
-#include "H5FLprivate.h" /* Free lists */
-
+#include "H5private.h" /* Generic Functions */
+#include "H5CXprivate.h" /* API Contexts */
+#include "H5Eprivate.h" /* Error handling */
+#include "H5Fprivate.h" /* File access */
+#include "H5FDpkg.h" /* File Drivers */
+#include "H5FDmulti.h" /* Usage-partitioned file family */
+#include "H5FLprivate.h" /* Free lists */
/****************/
/* Local Macros */
@@ -48,32 +46,26 @@
/* Define this to display information about file allocations */
/* #define H5FD_ALLOC_DEBUG */
-
/******************/
/* Local Typedefs */
/******************/
-
/********************/
/* Package Typedefs */
/********************/
-
/********************/
/* Local Prototypes */
/********************/
-
/*********************/
/* Package Variables */
/*********************/
-
/*****************************/
/* Library Private Variables */
/*****************************/
-
/*******************/
/* Local Variables */
/*******************/
@@ -81,8 +73,6 @@
/* Declare a free list to manage the H5FD_free_t struct */
H5FL_DEFINE(H5FD_free_t);
-
-
/*-------------------------------------------------------------------------
* Function: H5FD__extend
*
@@ -101,8 +91,8 @@ H5FL_DEFINE(H5FD_free_t);
static haddr_t
H5FD__extend(H5FD_t *file, H5FD_mem_t type, hsize_t size)
{
- haddr_t eoa; /* Address of end-of-allocated space */
- haddr_t ret_value = HADDR_UNDEF; /* Return value */
+ haddr_t eoa; /* Address of end-of-allocated space */
+ haddr_t ret_value = HADDR_UNDEF; /* Return value */
FUNC_ENTER_STATIC
@@ -116,7 +106,7 @@ H5FD__extend(H5FD_t *file, H5FD_mem_t type, hsize_t size)
eoa = file->cls->get_eoa(file, type);
/* Check for overflow when extending */
- if(H5F_addr_overflow(eoa, size) || (eoa + size) > file->maxaddr)
+ if (H5F_addr_overflow(eoa, size) || (eoa + size) > file->maxaddr)
HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "file allocation request failed")
/* Set the [NOT aligned] address to return */
@@ -124,14 +114,13 @@ H5FD__extend(H5FD_t *file, H5FD_mem_t type, hsize_t size)
/* Extend the end-of-allocated space address */
eoa += size;
- if(file->cls->set_eoa(file, type, eoa) < 0)
+ if (file->cls->set_eoa(file, type, eoa) < 0)
HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "file allocation request failed")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD__extend() */
-
/*-------------------------------------------------------------------------
* Function: H5FD__alloc_real
*
@@ -148,19 +137,18 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5FD__alloc_real(H5FD_t *file, H5FD_mem_t type, hsize_t size, haddr_t *frag_addr,
- hsize_t *frag_size)
+H5FD__alloc_real(H5FD_t *file, H5FD_mem_t type, hsize_t size, haddr_t *frag_addr, hsize_t *frag_size)
{
- hsize_t orig_size = size; /* Original allocation size */
- haddr_t eoa; /* Address of end-of-allocated space */
- hsize_t extra; /* Extra space to allocate, to align request */
- unsigned long flags = 0; /* Driver feature flags */
- hbool_t use_alloc_size; /* Just pass alloc size to the driver */
- haddr_t ret_value = HADDR_UNDEF; /* Return value */
+ hsize_t orig_size = size; /* Original allocation size */
+ haddr_t eoa; /* Address of end-of-allocated space */
+ hsize_t extra; /* Extra space to allocate, to align request */
+ unsigned long flags = 0; /* Driver feature flags */
+ hbool_t use_alloc_size; /* Just pass alloc size to the driver */
+ haddr_t ret_value = HADDR_UNDEF; /* Return value */
FUNC_ENTER_PACKAGE
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: type = %u, size = %Hu\n", FUNC, (unsigned)type, size);
+ HDfprintf(stderr, "%s: type = %u, size = %Hu\n", FUNC, (unsigned)type, size);
#endif /* H5FD_ALLOC_DEBUG */
/* check args */
@@ -170,7 +158,7 @@ HDfprintf(stderr, "%s: type = %u, size = %Hu\n", FUNC, (unsigned)type, size);
HDassert(size > 0);
/* Check for query driver and call it */
- if(file->cls->query)
+ if (file->cls->query)
(file->cls->query)(file, &flags);
/* Check for the driver feature flag */
@@ -181,39 +169,41 @@ HDfprintf(stderr, "%s: type = %u, size = %Hu\n", FUNC, (unsigned)type, size);
/* Compute extra space to allocate, if this should be aligned */
extra = 0;
- if(!file->paged_aggr && file->alignment > 1 && orig_size >= file->threshold) {
- hsize_t mis_align; /* Amount EOA is misaligned */
+ if (!file->paged_aggr && file->alignment > 1 && orig_size >= file->threshold) {
+ hsize_t mis_align; /* Amount EOA is misaligned */
/* Check for EOA already aligned */
- if((mis_align = (eoa % file->alignment)) > 0) {
+ if ((mis_align = (eoa % file->alignment)) > 0) {
extra = file->alignment - mis_align;
- if(frag_addr)
- *frag_addr = eoa - file->base_addr; /* adjust for file's base address */
- if(frag_size)
+ if (frag_addr)
+ *frag_addr = eoa - file->base_addr; /* adjust for file's base address */
+ if (frag_size)
*frag_size = extra;
} /* end if */
- } /* end if */
+ } /* end if */
/* Dispatch to driver `alloc' callback or extend the end-of-address marker */
- /* For the multi/split driver: the size passed down to the alloc callback is the original size from H5FD_alloc() */
- /* For all other drivers: the size passed down to the alloc callback is the size + [possibly] alignment size */
- if(file->cls->alloc) {
+ /* For the multi/split driver: the size passed down to the alloc callback is the original size from
+ * H5FD_alloc() */
+ /* For all other drivers: the size passed down to the alloc callback is the size + [possibly] alignment
+ * size */
+ if (file->cls->alloc) {
ret_value = (file->cls->alloc)(file, type, H5CX_get_dxpl(), use_alloc_size ? size : size + extra);
- if(!H5F_addr_defined(ret_value))
+ if (!H5F_addr_defined(ret_value))
HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "driver allocation request failed")
} /* end if */
else {
ret_value = H5FD__extend(file, type, size + extra);
- if(!H5F_addr_defined(ret_value))
+ if (!H5F_addr_defined(ret_value))
HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "driver eoa update request failed")
} /* end else */
/* Set the [possibly aligned] address to return */
- if(!use_alloc_size)
+ if (!use_alloc_size)
ret_value += extra;
/* Post-condition sanity check */
- if(!file->paged_aggr && file->alignment > 1 && orig_size >= file->threshold)
+ if (!file->paged_aggr && file->alignment > 1 && orig_size >= file->threshold)
HDassert(!(ret_value % file->alignment));
/* Convert absolute file offset to relative address */
@@ -221,12 +211,11 @@ HDfprintf(stderr, "%s: type = %u, size = %Hu\n", FUNC, (unsigned)type, size);
done:
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: ret_value = %a\n", FUNC, ret_value);
+ HDfprintf(stderr, "%s: ret_value = %a\n", FUNC, ret_value);
#endif /* H5FD_ALLOC_DEBUG */
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD__alloc_real() */
-
/*-------------------------------------------------------------------------
* Function: H5FD_alloc
*
@@ -246,10 +235,9 @@ HDfprintf(stderr, "%s: ret_value = %a\n", FUNC, ret_value);
*-------------------------------------------------------------------------
*/
haddr_t
-H5FD_alloc(H5FD_t *file, H5FD_mem_t type, H5F_t *f, hsize_t size,
- haddr_t *frag_addr, hsize_t *frag_size)
+H5FD_alloc(H5FD_t *file, H5FD_mem_t type, H5F_t *f, hsize_t size, haddr_t *frag_addr, hsize_t *frag_size)
{
- haddr_t ret_value = HADDR_UNDEF; /* Return value */
+ haddr_t ret_value = HADDR_UNDEF; /* Return value */
FUNC_ENTER_NOAPI(HADDR_UNDEF)
@@ -261,18 +249,17 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, H5F_t *f, hsize_t size,
/* Call the real 'alloc' routine */
ret_value = H5FD__alloc_real(file, type, size, frag_addr, frag_size);
- if(!H5F_addr_defined(ret_value))
+ if (!H5F_addr_defined(ret_value))
HGOTO_ERROR(H5E_VFL, H5E_CANTALLOC, HADDR_UNDEF, "real 'alloc' request failed")
/* Mark EOA info dirty in cache, so change will get encoded */
- if(H5F_eoa_dirty(f) < 0)
+ if (H5F_eoa_dirty(f) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTMARKDIRTY, HADDR_UNDEF, "unable to mark EOA info as dirty")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_alloc() */
-
/*-------------------------------------------------------------------------
* Function: H5FD__free_real
*
@@ -289,7 +276,7 @@ done:
herr_t
H5FD__free_real(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_PACKAGE
@@ -300,58 +287,58 @@ H5FD__free_real(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
HDassert(size > 0);
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: type = %u, addr = %a, size = %Hu\n", FUNC, (unsigned)type, addr, size);
+ HDfprintf(stderr, "%s: type = %u, addr = %a, size = %Hu\n", FUNC, (unsigned)type, addr, size);
#endif /* H5FD_ALLOC_DEBUG */
/* Sanity checking */
- if(!H5F_addr_defined(addr))
+ if (!H5F_addr_defined(addr))
HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "invalid file offset")
/* Convert address to absolute file offset */
addr += file->base_addr;
/* More sanity checking */
- if(addr > file->maxaddr || H5F_addr_overflow(addr, size) || (addr + size) > file->maxaddr)
+ if (addr > file->maxaddr || H5F_addr_overflow(addr, size) || (addr + size) > file->maxaddr)
HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, FAIL, "invalid file free space region to free")
/* Check for file driver 'free' callback and call it if available */
- if(file->cls->free) {
+ if (file->cls->free) {
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: Letting VFD free space\n", FUNC);
+ HDfprintf(stderr, "%s: Letting VFD free space\n", FUNC);
#endif /* H5FD_ALLOC_DEBUG */
- if((file->cls->free)(file, type, H5CX_get_dxpl(), addr, size) < 0)
+ if ((file->cls->free)(file, type, H5CX_get_dxpl(), addr, size) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "driver free request failed")
} /* end if */
/* Check if this free block is at the end of file allocated space.
* Truncate it if this is true.
*/
- else if(file->cls->get_eoa) {
- haddr_t eoa;
+ else if (file->cls->get_eoa) {
+ haddr_t eoa;
eoa = file->cls->get_eoa(file, type);
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: eoa = %a\n", FUNC, eoa);
+ HDfprintf(stderr, "%s: eoa = %a\n", FUNC, eoa);
#endif /* H5FD_ALLOC_DEBUG */
- if(eoa == (addr + size)) {
+ if (eoa == (addr + size)) {
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: Reducing file size to = %a\n", FUNC, addr);
+ HDfprintf(stderr, "%s: Reducing file size to = %a\n", FUNC, addr);
#endif /* H5FD_ALLOC_DEBUG */
- if(file->cls->set_eoa(file, type, addr) < 0)
+ if (file->cls->set_eoa(file, type, addr) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTSET, FAIL, "set end of space allocation request failed")
} /* end if */
- } /* end else-if */
+ } /* end else-if */
else {
/* leak memory */
#ifdef H5FD_ALLOC_DEBUG
-HDfprintf(stderr, "%s: LEAKED MEMORY!!! type = %u, addr = %a, size = %Hu\n", FUNC, (unsigned)type, addr, size);
+ HDfprintf(stderr, "%s: LEAKED MEMORY!!! type = %u, addr = %a, size = %Hu\n", FUNC, (unsigned)type,
+ addr, size);
#endif /* H5FD_ALLOC_DEBUG */
- } /* end else */
+ } /* end else */
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD__free_real() */
-
/*-------------------------------------------------------------------------
* Function: H5FD_free
*
@@ -373,7 +360,7 @@ done:
herr_t
H5FD_free(H5FD_t *file, H5FD_mem_t type, H5F_t *f, haddr_t addr, hsize_t size)
{
- herr_t ret_value = SUCCEED; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -384,18 +371,17 @@ H5FD_free(H5FD_t *file, H5FD_mem_t type, H5F_t *f, haddr_t addr, hsize_t size)
HDassert(size > 0);
/* Call the real 'free' routine */
- if(H5FD__free_real(file, type, addr, size) < 0)
+ if (H5FD__free_real(file, type, addr, size) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "real 'free' request failed")
/* Mark EOA info dirty in cache, so change will get encoded */
- if(H5F_eoa_dirty(f) < 0)
+ if (H5F_eoa_dirty(f) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTMARKDIRTY, FAIL, "unable to mark EOA info as dirty")
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_free() */
-
/*-------------------------------------------------------------------------
* Function: H5FD_try_extend
*
@@ -417,8 +403,8 @@ done:
htri_t
H5FD_try_extend(H5FD_t *file, H5FD_mem_t type, H5F_t *f, haddr_t blk_end, hsize_t extra_requested)
{
- haddr_t eoa; /* End of allocated space in file */
- htri_t ret_value = FALSE; /* Return value */
+ haddr_t eoa; /* End of allocated space in file */
+ htri_t ret_value = FALSE; /* Return value */
FUNC_ENTER_NOAPI(FAIL)
@@ -430,20 +416,20 @@ H5FD_try_extend(H5FD_t *file, H5FD_mem_t type, H5F_t *f, haddr_t blk_end, hsize_
HDassert(f);
/* Retrieve the end of the address space */
- if(HADDR_UNDEF == (eoa = file->cls->get_eoa(file, type)))
- HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "driver get_eoa request failed")
+ if (HADDR_UNDEF == (eoa = file->cls->get_eoa(file, type)))
+ HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "driver get_eoa request failed")
/* Adjust block end by base address of the file, to create absolute address */
blk_end += file->base_addr;
/* Check if the block is exactly at the end of the file */
- if(H5F_addr_eq(blk_end, eoa)) {
+ if (H5F_addr_eq(blk_end, eoa)) {
/* Extend the object by extending the underlying file */
- if(HADDR_UNDEF == H5FD__extend(file, type, extra_requested))
+ if (HADDR_UNDEF == H5FD__extend(file, type, extra_requested))
HGOTO_ERROR(H5E_VFL, H5E_CANTEXTEND, FAIL, "driver extend request failed")
/* Mark EOA info dirty in cache, so change will get encoded */
- if(H5F_eoa_dirty(f) < 0)
+ if (H5F_eoa_dirty(f) < 0)
HGOTO_ERROR(H5E_VFL, H5E_CANTMARKDIRTY, FAIL, "unable to mark EOA info as dirty")
/* Indicate success */
@@ -453,4 +439,3 @@ H5FD_try_extend(H5FD_t *file, H5FD_mem_t type, H5F_t *f, haddr_t blk_end, hsize_
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5FD_try_extend() */
-