stasis-aries-wal/lladd/operations/regions.h

41 lines
1.3 KiB
C
Raw Normal View History

/**
Allocates and deallocates regions of pages. The page before each
region is of type BOUNDARY_TAG. All regions except the last one in
the page file have a BOUNDARY_TAG page immediately after the end of
the region.
Each region is managed by an allocation manager, which manages the
allocation of pages within a region. The contents of pages within
a newly allocated region are undefined.
*/
typedef struct boundary_tag {
unsigned int size;
unsigned int prev_size;
int status;
int region_xid;
int allocation_manager;
} boundary_tag;
#define REGION_BASE (123)
#define REGION_VACANT (REGION_BASE + 0)
#define REGION_ZONED (REGION_BASE + 1)
#define REGION_OCCUPIED (REGION_BASE + 2)
#define REGION_CONDEMNED (REGION_BASE + 3)
void regionsInit();
unsigned int TregionAlloc(int xid, unsigned int pageCount, int allocaionManager);
void TregionDealloc(int xid, unsigned int firstPage);
unsigned int TregionSize(int xid, unsigned int firstPage);
/** Currently, this function is O(n) in the number of regions, so be careful! */
void TregionFindNthActive(int xid, unsigned int n, unsigned int * firstPage, unsigned int * size);
Operation getAllocBoundaryTag();
Operation getAllocRegion();
Operation getDeallocRegion();
// XXX need callbacks to handle transaction commit/abort.