Motr
M0
|
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/time.h>
#include <getopt.h>
#include <stdarg.h>
#include "lib/trace.h"
#include "conf/obj.h"
#include "fid/fid.h"
#include "motr/idx.h"
#include "motr/layout.h"
#include "m0hsm_api.h"
#include "motr/magic.h"
Go to the source code of this file.
Data Structures | |
struct | extent |
struct | param |
struct | io_ctx |
struct | min_gen_check_arg |
struct | release_cb_ctx |
struct | copy_cb_ctx |
Macros | |
#define | MAX_BLOCK_COUNT (200) |
#define | HSM_EXTENT_SCAN_BATCH 8 |
#define | ERROR(_fmt, ...) |
#define | INFO(_fmt, ...) |
#define | VERB(_fmt, ...) |
#define | DBG(_fmt, ...) |
#define | ENTRY DBG("> ENTERING %s()\n", __func__) |
#define | RETURN(_rc) |
#define | HSM_ANY_TIER UINT8_MAX |
#define | HSM_ID_MASK_HI (1LL<<31) |
#define | MAX(_x, _y) ((_x) > (_y) ? (_x) : (_y)) |
#define | MIN(_x, _y) ((_x) < (_y) ? (_x) : (_y)) |
Typedefs | |
typedef int(* | match_layer_cb_t) (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *layer, const struct extent *match, bool *stop) |
Enumerations | |
enum | { MAX_LEN =128, MAX_POOLS = 16 } |
enum | ext_match_code { EM_ERROR = -1, EM_NONE = 0, EM_PARTIAL = (1 << 0), EM_FULL = (1 << 2) } |
enum | ext_match_type { EMT_INTERSECT, EMT_MERGE } |
Functions | |
static int | read_params (FILE *in, struct param *p, int max_params) |
static int | hsm_pool_fid_set (struct param *p) |
static int | hsm_pools_fids_set (struct param p[], int n) |
int | m0hsm_init (struct m0_client *instance, struct m0_realm *uber_realm, const struct m0hsm_options *in_options) |
static bool | is_hsm_reserved (struct m0_uint128 id) |
static uint32_t | hsm_prio (uint32_t generation, uint8_t tier_idx) |
static struct m0_uint128 | hsm_subobj_id (struct m0_uint128 id, uint32_t gen, uint8_t tier) |
static uint32_t | hsm_prio2gen (uint32_t priority) |
static uint8_t | hsm_prio2tier (uint32_t priority) |
static struct m0_fid * | hsm_tier2pool (uint8_t tier_idx) |
static int | open_entity (struct m0_entity *entity) |
static int | create_obj (struct m0_uint128 id, struct m0_obj *obj, bool close_entity, uint8_t tier_idx) |
static int | delete_obj (struct m0_uint128 id) __attribute__((unused)) |
static int | create_obj_with_layout (struct m0_uint128 id, struct m0_obj *obj, struct m0_client_layout *layout, bool close_entity) |
static int | delete_obj_set_parent_layout (struct m0_uint128 id, struct m0_uint128 parent_id, struct m0_client_layout *parent_layout) |
static int | obj_layout_get (struct m0_obj *obj, struct m0_client_layout **layout) |
static int | layout_get (struct m0_uint128 id, struct m0_client_layout **layout) |
static int | obj_layout_set (struct m0_obj *obj, struct m0_client_layout *layout) |
static int | layout_set (struct m0_uint128 id, struct m0_client_layout *layout) |
M0_TL_DESCR_DEFINE (clayer, "composite layout layers", static, struct m0_composite_layer, ccr_tlink, ccr_tlink_magic, M0_CLAYER_TL_MAGIC, M0_CLAYER_TL_MAGIC) | |
M0_TL_DEFINE (clayer, static, struct m0_composite_layer) | |
M0_TL_DESCR_DEFINE (cext, "composite layout extents", static, struct m0_composite_extent, ce_tlink, ce_tlink_magic, M0_CEXT_TL_MAGIC, M0_CEXT_TL_MAGIC) | |
M0_TL_DEFINE (cext, static, struct m0_composite_extent) | |
static int | get_next_extents (struct m0_idx *idx, struct m0_bufvec *keys, struct m0_bufvec *vals, int *rc_list, int32_t flags) |
static int | read_extent_keys (struct m0_uint128 subobjid, struct m0_bufvec *keys, struct m0_bufvec *vals, int *rc_list, struct m0_tl *ext_list, struct m0_composite_layer_idx_key *last_key) |
static void | extent_list_free (struct m0_tl *ext_list) |
static void | reset_bufvec (struct m0_bufvec *keys, int count) |
static int | layer_load_extent_list (struct m0_uint128 subobjid, bool write, struct m0_tl *ext_list) |
static void | print_extents (FILE *stream, const struct m0_tl *ext_list, bool details) |
static void | print_layer (FILE *stream, struct m0_composite_layer *layer, bool details) |
static void | print_layout (FILE *stream, const struct m0_client_layout *layout, bool details) |
int | m0hsm_dump (FILE *stream, struct m0_uint128 id, bool details) |
static int | layer_extent_add (struct m0_uint128 subobjid, const struct extent *ext, bool write, bool overwrite) |
static int | layer_extent_del (struct m0_uint128 subobjid, off_t off, bool write) |
static void | layout_top_prio (struct m0_client_layout *layout, int32_t *max_gen, struct m0_uint128 *max_gen_id, uint8_t *top_tier) |
static int | layer_clean (struct m0_uint128 parent_id, struct m0_client_layout *layout, struct m0_composite_layer *layer) |
static int | layer_check_clean (struct m0_uint128 parent_id, struct m0_client_layout *layout, struct m0_composite_layer *layer) |
static int | layout_layer_clean (struct m0_uint128 parent_id, struct m0_client_layout *layout, struct m0_uint128 subobj_id) |
static int | layout_add_top_layer (struct m0_uint128 id, struct m0_client_layout *layout, uint8_t tier) |
static struct m0_composite_layer * | top_layer_get (struct m0_client_layout *layout) |
int | m0hsm_set_write_tier (struct m0_uint128 id, uint8_t tier_idx) |
static enum ext_match_code | ext_match (struct m0_uint128 layer_id, struct m0_tl *ext_list, const struct extent *ext_in, struct extent *match, enum ext_match_type mode, bool is_write, bool del_prev) |
static int | ext_subtract (struct m0_uint128 layer_id, struct m0_tl *ext_list, const struct extent *ext_in, bool is_write, bool *layer_empty) |
static int | add_merge_read_extent (struct m0_composite_layer *layer, const struct extent *ext_in) |
static int | m0hsm_release_maxgen (struct m0_uint128 id, uint8_t tier, int max_gen, off_t offset, size_t len, enum hsm_rls_flags flags, bool user_display) |
static int | top_layer_add_read_extent (struct m0_obj *obj, const struct extent *ext) |
int | m0hsm_create (struct m0_uint128 id, struct m0_obj *obj, uint8_t tier_idx, bool keep_open) |
static int | do_io_op (struct m0_obj *obj, enum m0_obj_opcode opcode, struct io_ctx *ctx) |
static int | write_blocks (struct m0_obj *obj, struct io_ctx *ctx) |
static int | read_blocks (struct m0_obj *obj, struct io_ctx *ctx) |
static void | gen_data (struct m0_bufvec *data, size_t bsize, int seed) |
static void | dump_data (struct m0_bufvec *data, size_t bsize) |
static int | prepare_io_ctx (struct io_ctx *ctx, int blocks, size_t block_size, bool alloc_io_buff) |
static int | check_vec (struct m0_bufvec *vec, int blocks) |
static int | map_io_ctx (struct io_ctx *ctx, int blocks, size_t b_size, off_t offset, char *buff) |
static void | free_io_ctx (struct io_ctx *ctx, bool alloc_io_buff) |
static uint64_t | roundup_power2 (uint64_t x) |
uint64_t | get_optimal_bs (struct m0_obj *obj, uint64_t obj_sz) |
int | m0hsm_test_write (struct m0_uint128 id, off_t offset, size_t len, int seed) |
int | m0hsm_pwrite (struct m0_obj *obj, void *buffer, size_t length, off_t offset) |
int | m0hsm_test_read (struct m0_uint128 id, off_t offset, size_t len) |
static int | copy_extent_data (struct m0_uint128 src_id, struct m0_uint128 tgt_id, const struct extent *range) |
static int | check_top_layer_writable (struct m0_client_layout *layout, int max_prio, int tier) |
static int | match_layer_foreach (struct m0_client_layout *layout, uint8_t tier, const struct extent *ext, match_layer_cb_t cb, void *cb_arg, bool stop_on_error) |
static struct m0_composite_layer * | layer_get_by_prio (struct m0_client_layout *layout, int prio) |
static int | min_gen_check_cb (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *layer, const struct extent *match, bool *stop) |
static int | check_min_gen_exists (struct m0_client_layout *layout, const struct extent *ext, int gen, struct m0_composite_layer *except_layer) |
static int | release_cb (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *layer, const struct extent *match, bool *stop) |
int | m0hsm_release (struct m0_uint128 id, uint8_t tier, off_t offset, size_t len, enum hsm_rls_flags flags) |
int | m0hsm_multi_release (struct m0_uint128 id, uint8_t max_tier, off_t offset, size_t length, enum hsm_rls_flags flags) |
static int | copy_cb (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *src_layer, const struct extent *match, bool *stop) |
int | m0hsm_copy (struct m0_uint128 id, uint8_t src_tier, uint8_t tgt_tier, off_t offset, size_t len, enum hsm_cp_flags flags) |
static int | stage_cb (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *src_layer, const struct extent *match, bool *stop) |
int | m0hsm_stage (struct m0_uint128 id, uint8_t tgt_tier, off_t offset, size_t length, enum hsm_cp_flags flags) |
static int | archive_cb (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *src_layer, const struct extent *match, bool *stop) |
int | m0hsm_archive (struct m0_uint128 id, uint8_t tgt_tier, off_t offset, size_t length, enum hsm_cp_flags flags) |
Variables | |
struct m0hsm_options | options |
static struct m0_client * | m0_instance |
static struct m0_realm * | m0_uber_realm |
static const struct extent | EXT_FULLRANGE |
static struct param | hsm_rc_params [128] |
static struct m0_fid | hsm_pools [MAX_POOLS] = {} |
#define DBG | ( | _fmt, | |
... | |||
) |
Definition at line 72 of file m0hsm_api.c.
Definition at line 75 of file m0hsm_api.c.
#define ERROR | ( | _fmt, | |
... | |||
) |
Definition at line 66 of file m0hsm_api.c.
#define HSM_ANY_TIER UINT8_MAX |
Special value meaning any tier.
Definition at line 202 of file m0hsm_api.c.
#define HSM_EXTENT_SCAN_BATCH 8 |
batch create + set_layout operation? How many extents we get in a batch from the extent index (arbitrary)
Definition at line 53 of file m0hsm_api.c.
#define HSM_ID_MASK_HI (1LL<<31) |
Definition at line 205 of file m0hsm_api.c.
#define INFO | ( | _fmt, | |
... | |||
) |
Definition at line 68 of file m0hsm_api.c.
#define MAX | ( | _x, | |
_y | |||
) | ((_x) > (_y) ? (_x) : (_y)) |
Definition at line 1264 of file m0hsm_api.c.
#define MAX_BLOCK_COUNT (200) |
Definition at line 48 of file m0hsm_api.c.
#define MIN | ( | _x, | |
_y | |||
) | ((_x) < (_y) ? (_x) : (_y)) |
Definition at line 1265 of file m0hsm_api.c.
#define RETURN | ( | _rc | ) |
Definition at line 76 of file m0hsm_api.c.
#define VERB | ( | _fmt, | |
... | |||
) |
Definition at line 70 of file m0hsm_api.c.
typedef int(* match_layer_cb_t) (void *cb_arg, struct m0_client_layout *layout, struct m0_composite_layer *layer, const struct extent *match, bool *stop) |
Callback function type for match_layer_foreach().
[in,out] | cb_arg | Custom callback argument. |
[in] | layout | The whole composite layout structure. |
[in] | layer | Layer of the matching extent. |
[in] | match | Matching extent. |
[out] | stop | setting to true will interupt the iteration. |
Definition at line 2218 of file m0hsm_api.c.
anonymous enum |
Enumerator | |
---|---|
MAX_LEN | |
MAX_POOLS |
Definition at line 92 of file m0hsm_api.c.
enum ext_match_code |
Enumerator | |
---|---|
EM_ERROR | |
EM_NONE | |
EM_PARTIAL | |
EM_FULL |
Definition at line 1250 of file m0hsm_api.c.
enum ext_match_type |
Enumerator | |
---|---|
EMT_INTERSECT | |
EMT_MERGE |
Definition at line 1259 of file m0hsm_api.c.
|
static |
Add and merge read extent in a given layer
Definition at line 1487 of file m0hsm_api.c.
|
static |
This callback is called for eaching match extent for archiving
Definition at line 2810 of file m0hsm_api.c.
|
static |
check that an extent with at least the given generation exists (except in the designated subobj)
Definition at line 2358 of file m0hsm_api.c.
|
static |
Definition at line 2192 of file m0hsm_api.c.
|
inlinestatic |
|
static |
This callback is called for each match extent in the source tier
Definition at line 2540 of file m0hsm_api.c.
|
static |
copy an extent from one (flat) object to another
Definition at line 2107 of file m0hsm_api.c.
|
static |
Helper to create an object with the given id.
tier_idx | defines the object location (HSM_ANY_TIER to leave it unspecified) |
Definition at line 301 of file m0hsm_api.c.
|
static |
Create an object with the given layout.
Definition at line 386 of file m0hsm_api.c.
|
static |
Helper to delete an object. (actually unused because we batch delete of subobject
Definition at line 356 of file m0hsm_api.c.
|
static |
Combine a subobject deletion + setting parent layout
Definition at line 433 of file m0hsm_api.c.
|
static |
write a block to an open entity
Definition at line 1648 of file m0hsm_api.c.
|
static |
|
static |
Definition at line 1267 of file m0hsm_api.c.
|
static |
Subtract an extent from existing extents. This function is supposed to be called with an intersecting extent, computed by ext_match. So the only possible case is a full matching extent.
Definition at line 1390 of file m0hsm_api.c.
|
static |
Free all extents in an extent list
Definition at line 696 of file m0hsm_api.c.
|
static |
release resources in an IO context
Definition at line 1811 of file m0hsm_api.c.
|
static |
Generate and Write data to the I/O vector, using the given seed
Definition at line 1687 of file m0hsm_api.c.
|
static |
Wrap a single "get next" operation on the extent index (read a batch of extents).
Definition at line 613 of file m0hsm_api.c.
uint64_t get_optimal_bs | ( | struct m0_obj * | obj, |
uint64_t | obj_sz | ||
) |
Calculate the optimal block size for the object store I/O
Definition at line 1834 of file m0hsm_api.c.
|
static |
Definition at line 127 of file m0hsm_api.c.
|
static |
Definition at line 147 of file m0hsm_api.c.
|
static |
Build layer priority from generation number and tier number
Definition at line 221 of file m0hsm_api.c.
|
static |
Extract generation number from layer priority.
Definition at line 252 of file m0hsm_api.c.
|
static |
Extract tier index from layer priority.
Definition at line 260 of file m0hsm_api.c.
|
static |
Build subobject id from parent object id, generation number and tier number.
Definition at line 237 of file m0hsm_api.c.
|
static |
Returns a pointer to a pool fid for the given tier index.
Definition at line 269 of file m0hsm_api.c.
|
static |
|
static |
Check that the given layer no longer have readable extents. If so, release and drop the layer. It is expected that the subobject no longer have writable extent before this function is called.
Definition at line 1100 of file m0hsm_api.c.
|
static |
Release and drop the layer. It is expected that the subobject no longer have writable extent before this function is called.
Definition at line 1077 of file m0hsm_api.c.
|
static |
Add an extent to a layer.
subobjid | Layer id. |
ext | Extent to be added. |
write | Whether to set a read or write extents (true for write). |
overwrite | Whether to overwrite a previous extent starting at the same offset. |
Definition at line 904 of file m0hsm_api.c.
|
static |
Definition at line 980 of file m0hsm_api.c.
|
static |
Return the layer with the given priority
Definition at line 2294 of file m0hsm_api.c.
|
static |
Helper to load a list of extents for a given layer.
subobjid | Layer id |
write | Whether to load the read or write extents (true for write). |
ext_list | List of extents to be populated. |
Definition at line 723 of file m0hsm_api.c.
|
static |
Definition at line 1155 of file m0hsm_api.c.
|
static |
Get the layout of an object designated by its fid.
Definition at line 527 of file m0hsm_api.c.
|
static |
Release and drop the layer with the given subobj_id in the layout if it no longer has readable extents. It is expected that the subobject no longer have writable extent before this function is called. If successfull, the function sets the layout.
Definition at line 1133 of file m0hsm_api.c.
|
static |
Set the layout of an object designated by its fid
Definition at line 573 of file m0hsm_api.c.
|
static |
Retrieves the max generation number and the smallest tier index from layers of composite layout.
Definition at line 1042 of file m0hsm_api.c.
M0_TL_DEFINE | ( | clayer | , |
static | , | ||
struct m0_composite_layer | |||
) |
M0_TL_DEFINE | ( | cext | , |
static | , | ||
struct m0_composite_extent | |||
) |
M0_TL_DESCR_DEFINE | ( | clayer | , |
"composite layout layers" | , | ||
static | , | ||
struct m0_composite_layer | , | ||
ccr_tlink | , | ||
ccr_tlink_magic | , | ||
M0_CLAYER_TL_MAGIC | , | ||
M0_CLAYER_TL_MAGIC | |||
) |
M0_TL_DESCR_DEFINE | ( | cext | , |
"composite layout extents" | , | ||
static | , | ||
struct m0_composite_extent | , | ||
ce_tlink | , | ||
ce_tlink_magic | , | ||
M0_CEXT_TL_MAGIC | , | ||
M0_CEXT_TL_MAGIC | |||
) |
int m0hsm_archive | ( | struct m0_uint128 | obj_id, |
uint8_t | target_tier, | ||
off_t | offset, | ||
size_t | length, | ||
enum hsm_cp_flags | flags | ||
) |
Request to archive data to a slower tier.
obj_id | Id of the object to be archived. |
targer_tier | Target tier index (0 is the top tier). |
offset | Start offset of the region to be staged. |
length | Size of the region to be staged. |
flags | Set of OR'ed hsm_cp_flags. |
Definition at line 2831 of file m0hsm_api.c.
int m0hsm_copy | ( | struct m0_uint128 | obj_id, |
uint8_t | src_tier_idx, | ||
uint8_t | tgt_tier_idx, | ||
off_t | offset, | ||
size_t | length, | ||
enum hsm_cp_flags | flags | ||
) |
Copy a region of an object from one tier to another. This is transparent to applications if they use the I/O calls defined above (m0hsm_create/pread/pwrite).
obj_id | Id of the object to be copied. |
src_tier_idx | Source tier index (0 is the top tier). |
tgt_tier_idx | Target tier index (0 is the top tier). |
offset | Start offset of the region to be copied. |
length | Size of the region to be copied. |
flags | Set of OR'ed hsm_cp_flags. |
Definition at line 2715 of file m0hsm_api.c.
int m0hsm_create | ( | struct m0_uint128 | id, |
struct m0_obj * | obj, | ||
uint8_t | tier_idx, | ||
bool | keep_open | ||
) |
Create an object to be managed by HSM.
id | Identifier of the object to be created. |
obj | Pointer to the created object. |
tier_idx | Index of the target tier (0 is the top tier). |
keep_open | Keep the object entity opened. |
Definition at line 1571 of file m0hsm_api.c.
int m0hsm_dump | ( | FILE * | stream, |
struct m0_uint128 | id, | ||
bool | details | ||
) |
Dump HSM information about a composite object.
stream | FILE* to write information to. |
id | Identifier of the object to dump. |
details | If true dump all details, else print brief output. |
Definition at line 875 of file m0hsm_api.c.
int m0hsm_init | ( | struct m0_client * | instance, |
struct m0_realm * | uber_realm, | ||
const struct m0hsm_options * | options | ||
) |
Initialize HSM API.
options | HSM options. NULL to keep defaults. |
Definition at line 166 of file m0hsm_api.c.
int m0hsm_multi_release | ( | struct m0_uint128 | obj_id, |
uint8_t | max_tier, | ||
off_t | offset, | ||
size_t | length, | ||
enum hsm_rls_flags | flags | ||
) |
Release a region of an object from multiple tiers. All data in tiers up to max_tier are released.
obj_id | Id of the object to be archived. |
targer_tier | Target tier index (0 is the top tier). |
offset | Start offset of the region to be staged. |
length | Size of the region to be staged. |
flags | Set of OR'ed hsm_rls_flags. |
Definition at line 2499 of file m0hsm_api.c.
int m0hsm_pwrite | ( | struct m0_obj * | obj, |
void * | buf, | ||
size_t | len, | ||
off_t | off | ||
) |
[WORKAROUND CALL] This call fixes a miss in composite layout management i.e. create a associated read extent when a data is written.
Write data to an object. Object's entity must be opened prior to calling this. offset and length must respect usual m0 requirements of alignment (PAGE_SIZE minimum).
obj | Object to write data to. |
iov | Data buffer. |
off | Start offset. |
Definition at line 1968 of file m0hsm_api.c.
int m0hsm_release | ( | struct m0_uint128 | obj_id, |
uint8_t | tier_idx, | ||
off_t | offset, | ||
size_t | length, | ||
enum hsm_rls_flags | flags | ||
) |
Release a region of an object from the given tier.
obj_id | Id of the object to be released. |
tier_idx | Tier to drop the data from. |
offset | Start offset of the region to be released. |
length | Size of the region to be released. |
flags | Set of OR'ed hsm_rls_flags. |
Definition at line 2493 of file m0hsm_api.c.
|
static |
same as release, but precise max generation
Definition at line 2462 of file m0hsm_api.c.
int m0hsm_set_write_tier | ( | struct m0_uint128 | id, |
uint8_t | tier_idx | ||
) |
Selects the target tier for next write operations. This does not move existing data.
obj | Object for which we want to change the write tier. |
Definition at line 1224 of file m0hsm_api.c.
int m0hsm_stage | ( | struct m0_uint128 | obj_id, |
uint8_t | target_tier, | ||
off_t | offset, | ||
size_t | length, | ||
enum hsm_cp_flags | flags | ||
) |
Request to stage data to a faster tier.
obj_id | Id of the object to be staged. |
targer_tier | Target tier index (0 is the top tier). |
offset | Start offset of the region to be staged. |
length | Size of the region to be staged. |
flags | HSM_WRITE_TO_DEST if next write operations should also be directed to the same fast tier (intensive writes expected). |
Definition at line 2773 of file m0hsm_api.c.
int m0hsm_test_read | ( | struct m0_uint128 | id, |
off_t | offset, | ||
size_t | len | ||
) |
read data from an existing object at the given offset.
Definition at line 2045 of file m0hsm_api.c.
int m0hsm_test_write | ( | struct m0_uint128 | id, |
off_t | offset, | ||
size_t | len, | ||
int | seed | ||
) |
write data to an existing object at the given offset
seed | Used to generate block contents so it can be used to verify we read the right layer. |
Definition at line 1875 of file m0hsm_api.c.
|
static |
Fill in an I/O context for a given I/O operation. Map user provided buffer if not NULL.
Definition at line 1775 of file m0hsm_api.c.
|
static |
Iterate on object layers that match the given tier and the given extent. Iteration stops if a callback returns non-zero or sets the "stop" boolean.
Definition at line 2228 of file m0hsm_api.c.
|
static |
Definition at line 2319 of file m0hsm_api.c.
|
static |
Get the layout of an object
Definition at line 500 of file m0hsm_api.c.
|
static |
Set the layout of an object
Definition at line 549 of file m0hsm_api.c.
|
static |
Helper to open an object entity
Definition at line 277 of file m0hsm_api.c.
|
static |
Allocate I/O context for a particular number of blocks and block size
alloc_io_buff | Does the function allocate I/O buffers or are they provided by the user? |
Definition at line 1709 of file m0hsm_api.c.
|
static |
|
static |
Definition at line 813 of file m0hsm_api.c.
|
static |
Definition at line 850 of file m0hsm_api.c.
read data from an open object
Definition at line 1681 of file m0hsm_api.c.
|
static |
Read returned keys and add them to the extent list
Definition at line 642 of file m0hsm_api.c.
|
static |
|
static |
TODO actually release the data region
Definition at line 2392 of file m0hsm_api.c.
|
static |
Reset a list of buffers
Definition at line 705 of file m0hsm_api.c.
|
static |
|
static |
This callback is called for eaching match extent for staging
Definition at line 2751 of file m0hsm_api.c.
Definition at line 1537 of file m0hsm_api.c.
|
static |
write a block to an open entity
Definition at line 1675 of file m0hsm_api.c.
|
static |
largest extent possible
Definition at line 87 of file m0hsm_api.c.
Definition at line 103 of file m0hsm_api.c.
|
static |
Definition at line 102 of file m0hsm_api.c.
|
static |
Definition at line 62 of file m0hsm_api.c.
|
static |
Definition at line 63 of file m0hsm_api.c.
struct m0hsm_options options |
Definition at line 56 of file m0hsm_api.c.