|
| #define | DEBUG 1 |
| |
| #define | getpagesize() PAGE_SIZE |
| |
| #define | O_BINARY 0 |
| |
| #define | RVM_LOG_VERSION "RVM Log Version 1.4 Oct 17, 1997 " |
| |
| #define | REALLOC(x, l) (((x) == NULL) ? malloc(l) : realloc((x), (l))) |
| |
| #define | BCOPY(x, y, n) bcopy((x), (y), (n)) |
| |
| #define | BZERO(x, n) bzero((x), (n)) |
| |
| #define | DO_FOREVER for (;;) |
| |
| #define | FORWARD rvm_true /* record scan forward */ |
| |
| #define | REVERSE rvm_false /* record scan reverse */ |
| |
| #define | ERR_DATE_SKEW "Current time before last recorded - check kernel date" |
| |
| #define | TIME_LSS(x, y) |
| |
| #define | TIME_GTR(x, y) |
| |
| #define | TIME_LEQ(x, y) (!TIME_GTR((x), (y))) |
| |
| #define | TIME_GEQ(x, y) (!TIME_LSS((x), (y))) |
| |
| #define | TIME_EQL(x, y) (((x).tv_sec == (y).tv_sec) && ((x).tv_usec == (y).tv_usec)) |
| |
| #define | TIME_EQL_ZERO(x) (((x).tv_sec == 0 && ((x).tv_usec == 0))) |
| |
| #define | ZERO_TIME(x) |
| |
| #define | LENGTH_MASK ((rvm_length_t)(~(sizeof(rvm_length_t) - 1))) |
| |
| #define | ROUND_TO_LENGTH(len) |
| |
| #define | CHOP_TO_LENGTH(len) ((rvm_length_t)((rvm_length_t)(len) & LENGTH_MASK)) |
| |
| #define | ALIGNED_LEN(addr, len) |
| |
| #define | BYTE_SKEW(len) ((rvm_length_t)(len) & ~LENGTH_MASK) |
| |
| #define | SECTOR_SIZE 512 |
| |
| #define | SECTOR_MASK ((rvm_length_t)(~(SECTOR_SIZE - 1))) |
| |
| #define | ROUND_TO_SECTOR_SIZE(x) (((rvm_length_t)(x) + SECTOR_SIZE - 1) & SECTOR_MASK) |
| |
| #define | CHOP_TO_SECTOR_SIZE(x) ((rvm_length_t)(x) & SECTOR_MASK) |
| |
| #define | SECTOR_INDEX(x) ((x) & (SECTOR_SIZE - 1)) |
| |
| #define | ROUND_OFFSET_TO_SECTOR_SIZE(x) rvm_rnd_offset_to_sector(&(x)) |
| |
| #define | CHOP_OFFSET_TO_SECTOR_SIZE(x) |
| |
| #define | OFFSET_TO_SECTOR_INDEX(x) (SECTOR_INDEX(RVM_OFFSET_TO_LENGTH((x)))) |
| |
| #define | CHOP_OFFSET_TO_LENGTH_SIZE(x) |
| |
| #define | ROUND_TO_PAGE_SIZE(x) (((rvm_length_t)(x) + page_size - 1) & page_mask) |
| |
| #define | CHOP_TO_PAGE_SIZE(x) ((rvm_length_t)(x) & page_mask) |
| |
| #define | OFFSET_TO_FLOAT(x) |
| |
| #define | ID_INDEX(id) ((rvm_length_t)(id) - (rvm_length_t)struct_first_id - 1) |
| |
| #define | INDEX_ID(i) ((struct_id_t)((i) + 1 + (long)struct_first_id)) |
| |
| #define | NUM_CACHE_TYPES ((rvm_length_t)struct_last_cache_id - (rvm_length_t)struct_first_id - 1) |
| |
| #define | NUM_TYPES ((rvm_length_t)struct_last_id - (rvm_length_t)struct_first_id - 1) |
| |
| #define | NUM_PRE_ALLOCATED |
| |
| #define | MAX_ALLOCATED |
| |
| #define | CACHE_TYPE_SIZES |
| |
| #define | OTHER_TYPE_SIZES |
| |
| #define | TYPE_NAMES |
| |
| #define | LIST_EMPTY(lst) ((lst).list.length == 0) |
| |
| #define | LIST_NOT_EMPTY(lst) ((lst).list.length != 0) |
| |
| #define | FOR_ENTRIES_OF(lst, type, ptr) |
| |
| #define | FOR_REVERSE_ENTRIES_OF(lst, type, ptr) |
| |
| #define | UNLINK_ENTRIES_OF(lst, type, ptr) |
| |
| #define | UNLINK_REVERSE_ENTRIES_OF(lst, type, ptr) |
| |
| #define | RVM_MUTEX struct mutex |
| |
| #define | RVM_CONDITION struct condition |
| |
| #define | LOCK_FREE(lck) (mutex_try_lock(&(lck)) ? (mutex_unlock(&(lck)), rvm_true) : rvm_false) |
| |
| #define | CRITICAL(lck, body) |
| |
| #define | RW_CRITICAL(rwl, mode, body) |
| |
| #define | RW_LOCK_FREE(rwl) (((rwl).read_cnt + (rwl).write_cnt) == 0) && ((rwl).lock_mode == f) |
| |
| #define | TRAVERSE_LEN_INCR 15 /* allocate 15 slots at a time */ |
| |
| #define | FOR_NODES_OF(tree, type, ptr) |
| |
| #define | FOR_REVERSE_NODES_OF(tree, type, ptr) |
| |
| #define | FROM_EXISTING_NODE_OF(tree, type, ptr, node, cmp) |
| |
| #define | UNLINK_NODES_OF(tree, type, ptr) |
| |
| #define | UNLINK_REVERSE_NODES_OF(tree, type, ptr) |
| |
| #define | NV_BUF_SIZE(len) (ROUND_TO_LENGTH((len)) + sizeof(nv_buf_t)) |
| |
| #define | RANGE_LEN(range) (ALIGNED_LEN((range)->nv.vmaddr, (range)->nv.length)) |
| |
| #define | RANGE_SIZE(range) ((rvm_length_t)(NV_RANGE_OVERHEAD + RANGE_LEN(range))) |
| |
| #define | TRANS_SIZE (ROUND_TO_LENGTH((sizeof(trans_hdr_t) + sizeof(rec_end_t)))) |
| |
| #define | NV_RANGE_OVERHEAD (ROUND_TO_LENGTH(sizeof(nv_range_t))) |
| |
| #define | MIN_NV_RANGE_SIZE (NV_RANGE_OVERHEAD + 64) |
| |
| #define | MIN_TRANS_SIZE (TRANS_SIZE + MIN_NV_RANGE_SIZE + ROUND_TO_LENGTH(sizeof(log_wrap_t))) |
| |
| #define | LOG_SPECIAL_SIZE (ROUND_TO_LENGTH(sizeof(log_special_t) - sizeof(list_entry_t))) |
| |
| #define | LOG_SPECIAL_IOV_MAX 3 |
| |
| #define | MAX_HDR_SIZE (ROUND_TO_LENGTH((sizeof(log_special_t) + MAXPATHLEN))) |
| |
| #define | NV_LOCAL_MAX (8 * 1024 - ROUND_TO_LENGTH(NV_BUF_SIZE(sizeof(rvm_length_t) + 1))) |
| |
| #define | LOG_DEV_STATUS_SIZE ROUND_TO_SECTOR_SIZE(sizeof(log_dev_status_t)) |
| |
| #define | RAW_STATUS_OFFSET 16 * SECTOR_SIZE |
| |
| #define | FILE_STATUS_OFFSET 0 |
| |
| #define | UPDATE_STATUS 100 /* flushes before updating log status area */ |
| |
| #define | RVM_FLUSH_CALL (1) |
| |
| #define | RVM_FLUSH_COMMIT (2) |
| |
| #define | RVM_RECOVERY (4) |
| |
| #define | RVM_TRUNCATE_CALL (010) |
| |
| #define | RVM_ASYNC_TRUNCATE (020) |
| |
| #define | RVM_SYNC_TRUNCATE (040) |
| |
| #define | RVM_TRUNC_FIND_TAIL (0100) |
| |
| #define | RVM_TRUNC_BUILD_TREE (0200) |
| |
| #define | RVM_TRUNC_APPLY (0400) |
| |
| #define | RVM_TRUNC_UPDATE (01000) |
| |
| #define | RVM_TRUNC_PHASES |
| |
| #define | SYNCH rvm_true /* synchronization required */ |
| |
| #define | NO_SYNCH rvm_false /* synchronization not required */ |
| |
| #define | SEG_DICT_INDEX(x) ((x) - 1) /* index of segemnt in seg_dict_vec */ |
| |
| #define | RESTORE_FLAG (2 * RVM_COALESCE_TRANS) |
| |
| #define | FLUSH_FLAG (2 * RESTORE_FLAG) |
| |
| #define | FIRST_ENTRY_FLAG (2 * FLUSH_FLAG) |
| |
| #define | LAST_ENTRY_FLAG (2 * FIRST_ENTRY_FLAG) |
| |
| #define | FLUSH_MARK (2 * LAST_ENTRY_FLAG) |
| |
| #define | TID(x) ((tid->flags & (x)) != 0) |
| |
| #define | TRANS_HDR(x) ((trans_hdr->flags & (x)) != 0) |
| |
|
| rvm_bool_t | rvm_register_page (char *vmaddr, rvm_length_t length) |
| |
| rvm_bool_t | rvm_unregister_page (char *vmaddr, rvm_length_t length) |
| |
| void | init_list_header (list_entry_t *whichlist, struct_id_t struct_id) |
| |
| list_entry_t * | move_list_entry (list_entry_t *fromptr, list_entry_t *toptr, list_entry_t *cell) |
| |
| list_entry_t * | alloc_list_entry (struct_id_t id) |
| |
| void | clear_free_lists (void) |
| |
| region_t * | make_region (void) |
| |
| void | free_region (region_t *region) |
| |
| seg_t * | make_seg (char *seg_dev_name, rvm_return_t *retval) |
| |
| void | free_seg (seg_t *seg) |
| |
| void | free_seg_dict_vec (log_t *log) |
| |
| log_t * | make_log (char *dev_name, rvm_return_t *retval) |
| |
| void | free_log (log_t *log) |
| |
| char * | make_full_name (char *dev_str, char *dev_name, rvm_return_t *retval) |
| |
| log_special_t * | make_log_special (struct_id_t special_id, rvm_length_t length) |
| |
| void | free_log_special (log_special_t *special) |
| |
| rvm_return_t | dev_init (device_t *dev, char *dev_str) |
| |
| range_t * | make_range (void) |
| |
| void | free_range (range_t *range) |
| |
| int_tid_t * | make_tid (rvm_mode_t mode) |
| |
| void | free_tid (int_tid_t *tid) |
| |
| mem_region_t * | make_mem_region (void) |
| |
| void | free_mem_region (mem_region_t *node) |
| |
| dev_region_t * | make_dev_region (void) |
| |
| void | free_dev_region (dev_region_t *node) |
| |
| void | init_log_list (void) |
| |
| void | enter_log (log_t *log) |
| |
| rvm_return_t | open_log (char *dev_name, log_t **log_ptr, char *status_buf, rvm_options_t *rvm_options) |
| |
| rvm_return_t | create_log (log_t **log_ptr, rvm_options_t *rvm_options) |
| |
| rvm_return_t | do_log_options (log_t **log, rvm_options_t *rvm_options) |
| |
| rvm_return_t | close_log (log_t *log) |
| |
| rvm_return_t | close_all_logs (void) |
| |
| void | copy_log_stats (log_t *log) |
| |
| void | clear_log_status (log_t *log) |
| |
| rvm_return_t | init_log_status (log_t *log) |
| |
| rvm_return_t | read_log_status (log_t *log, char *status_buf) |
| |
| rvm_return_t | write_log_status (log_t *log, device_t *dev) |
| |
| rvm_return_t | update_log_tail (log_t *log, rec_hdr_t *rec_hdr) |
| |
| void | log_tail_length (log_t *log, rvm_offset_t *tail_length) |
| |
| void | log_tail_sngl_w (log_t *log, rvm_offset_t *tail_length) |
| |
| long | cur_log_percent (log_t *log, rvm_offset_t *space_needed) |
| |
| void | cur_log_length (log_t *log, rvm_offset_t *length) |
| |
| rvm_return_t | queue_special (log_t *log, log_special_t *special) |
| |
| rvm_return_t | flush_log (log_t *log, rvm_length_t *count) |
| |
| rvm_return_t | locate_tail (log_t *log) |
| |
| rvm_return_t | init_buffer (log_t *log, rvm_offset_t *offset, rvm_bool_t direction, rvm_bool_t synch) |
| |
| void | clear_aux_buf (log_t *log) |
| |
| rvm_return_t | load_aux_buf (log_t *log, rvm_offset_t *offset, rvm_length_t length, rvm_length_t *aux_ptr, rvm_length_t *data_len, rvm_bool_t direction, rvm_bool_t synch) |
| |
| void | reset_hdr_chks (log_t *log) |
| |
| rvm_bool_t | chk_hdr_currency (log_t *log, rec_hdr_t *rec_hdr) |
| |
| rvm_bool_t | chk_hdr_sequence (log_t *log, rec_hdr_t *rec_hdr, rvm_bool_t direction) |
| |
| rvm_bool_t | validate_hdr (log_t *log, rec_hdr_t *rec_hdr, rec_end_t *rec_end, rvm_bool_t direction) |
| |
| rvm_return_t | validate_rec_reverse (log_t *log, rvm_bool_t synch) |
| |
| rvm_return_t | scan_forward (log_t *log, rvm_bool_t synch) |
| |
| rvm_return_t | scan_reverse (log_t *log, rvm_bool_t synch) |
| |
| rvm_return_t | scan_nv_forward (log_t *log, rvm_bool_t synch) |
| |
| rvm_return_t | scan_wrap_reverse (log_t *log, rvm_bool_t synch) |
| |
| rvm_bool_t | initiate_truncation (log_t *log, rvm_length_t threshold) |
| |
| rvm_return_t | wait_for_truncation (log_t *log, struct timeval *time_stamp) |
| |
| rvm_return_t | log_recover (log_t *log, rvm_length_t *count, rvm_bool_t is_daemon, rvm_length_t flag) |
| |
| void | log_daemon (void *) |
| |
| rvm_return_t | alloc_log_buf (log_t *log) |
| |
| void | free_log_buf (log_t *log) |
| |
| void | init_map_roots (void) |
| |
| rvm_return_t | bad_region (rvm_region_t *rvm_region) |
| |
| char * | page_alloc (rvm_length_t len) |
| |
| void | page_free (char *vmaddr, rvm_length_t length) |
| |
| rvm_return_t | close_all_segs (void) |
| |
| seg_t * | seg_lookup (char *dev_name, rvm_return_t *retval) |
| |
| rvm_return_t | define_all_segs (log_t *log) |
| |
| long | dev_partial_include (rvm_offset_t *base1, rvm_offset_t *end1, rvm_offset_t *base2, rvm_offset_t *end2) |
| |
| long | dev_total_include (rvm_offset_t *base1, rvm_offset_t *end1, rvm_offset_t *base2, rvm_offset_t *end2) |
| |
| long | mem_total_include (tree_node_t *tnode1, tree_node_t *tnode2) |
| |
| region_t * | find_whole_range (char *dest, rvm_length_t length, rw_lock_mode_t mode) |
| |
| rvm_return_t | rvm_map (rvm_region_t *rvm_region, rvm_options_t *rvm_options) |
| |
| rvm_return_t | enter_seg_dict (log_t *log, long seg_code) |
| |
| rvm_return_t | def_seg_dict (log_t *log, rec_hdr_t *rec_hdr) |
| |
| long | open_dev (device_t *dev, long flags, long mode) |
| |
| long | close_dev (device_t *dev) |
| |
| long | read_dev (device_t *dev, rvm_offset_t *offset, char *dest, rvm_length_t length) |
| |
| long | write_dev (device_t *dev, rvm_offset_t *offset, char *src, rvm_length_t length, rvm_bool_t no_sync) |
| |
| long | sync_dev (device_t *dev) |
| |
| long | gather_write_dev (device_t *dev, rvm_offset_t *offset) |
| |
| long | set_dev_char (device_t *dev, rvm_offset_t *dev_length) |
| |
| void | rw_lock (rw_lock_t *rwl, rw_lock_mode_t mode) |
| |
| void | rw_unlock (rw_lock_t *rwl, rw_lock_mode_t mode) |
| |
| void | init_rw_lock (rw_lock_t *rwl) |
| |
| void | init_tree_root (tree_root_t *root) |
| |
| tree_node_t * | tree_lookup (tree_root_t *tree, tree_node_t *node, cmp_func_t *cmp) |
| |
| rvm_bool_t | tree_insert (tree_root_t *tree, tree_node_t *node, cmp_func_t *cmp) |
| |
| rvm_bool_t | tree_delete (tree_root_t *tree, tree_node_t *node, cmp_func_t *cmp) |
| |
| tree_node_t * | init_tree_generator (tree_root_t *tree, rvm_bool_t direction, rvm_bool_t unlink) |
| |
| tree_node_t * | tree_iterate_insert (tree_root_t *tree, tree_node_t *node, cmp_func_t *cmp) |
| |
| tree_node_t * | tree_successor (tree_root_t *tree) |
| |
| tree_node_t * | tree_predecessor (tree_root_t *tree) |
| |
| rvm_bool_t | bad_init (void) |
| |
| rvm_return_t | bad_options (rvm_options_t *rvm_options, rvm_bool_t chk_log_dev) |
| |
| rvm_return_t | bad_statistics (rvm_statistics_t *rvm_statistics) |
| |
| rvm_return_t | bad_tid (rvm_tid_t *rvm_tid) |
| |
| rvm_return_t | do_rvm_options (rvm_options_t *rvm_options) |
| |
| void | make_uname (struct timeval *time) |
| |
| long | init_unames (void) |
| |
| struct timeval | add_times (struct timeval *x, struct timeval *y) |
| |
| struct timeval | sub_times (struct timeval *x, struct timeval *y) |
| |
| long | round_time (struct timeval *x) |
| |
| void | enter_histogram (long val, rvm_length_t *histo, rvm_length_t *histo_def, long length) |
| |
| long | init_utils (void) |
| |
| rvm_length_t | chk_sum (char *nvaddr, rvm_length_t len) |
| |
| void | src_aligned_bcopy (char *src, char *dest, rvm_length_t len) |
| |
| void | dest_aligned_bcopy (char *src, char *dest, rvm_length_t len) |
| |
| rvm_offset_t | rvm_rnd_offset_to_sector (rvm_offset_t *x) |
| |
| void | rvm_debug (rvm_length_t val) |
| |