diff options
Diffstat (limited to 'innobase/include/log0log.ic')
-rw-r--r-- | innobase/include/log0log.ic | 85 |
1 files changed, 56 insertions, 29 deletions
diff --git a/innobase/include/log0log.ic b/innobase/include/log0log.ic index 36e65239374..9167246fe45 100644 --- a/innobase/include/log0log.ic +++ b/innobase/include/log0log.ic @@ -170,33 +170,6 @@ log_block_set_checkpoint_no( } /**************************************************************** -Gets a log block number stored in the trailer. */ -UNIV_INLINE -ulint -log_block_get_trl_no( -/*=================*/ - /* out: log block number stored in the block - trailer */ - byte* log_block) /* in: log block */ -{ - return(mach_read_from_3(log_block + OS_FILE_LOG_BLOCK_SIZE - - LOG_BLOCK_TRL_NO)); -} - -/**************************************************************** -Sets the log block number stored in the trailer. */ -UNIV_INLINE -void -log_block_set_trl_no( -/*=================*/ - byte* log_block, /* in: log block */ - ulint n) /* in: log block number */ -{ - mach_write_to_3(log_block + OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_NO, - n & 0xFFFFFF); -} - -/**************************************************************** Converts a lsn to a log block number. */ UNIV_INLINE ulint @@ -217,6 +190,61 @@ log_block_convert_lsn_to_no( } /**************************************************************** +Calculates the checksum for a log block. */ +UNIV_INLINE +ulint +log_block_calc_checksum( +/*====================*/ + /* out: checksum */ + byte* block) /* in: log block */ +{ + ulint sum; + ulint sh; + ulint i; + + sum = 1; + sh = 0; + + for (i = 0; i < OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE; i++) { + sum = sum & 0x7FFFFFFF; + sum += ((ulint)(*(block + i))) << sh; + sh++; + if (sh > 24) { + sh = 0; + } + } + + return(sum); +} + +/**************************************************************** +Gets a log block checksum field value. */ +UNIV_INLINE +ulint +log_block_get_checksum( +/*===================*/ + /* out: checksum */ + byte* log_block) /* in: log block */ +{ + return(mach_read_from_4(log_block + OS_FILE_LOG_BLOCK_SIZE + - LOG_BLOCK_CHECKSUM)); +} + +/**************************************************************** +Sets a log block checksum field value. */ +UNIV_INLINE +void +log_block_set_checksum( +/*===================*/ + byte* log_block, /* in: log block */ + ulint checksum) /* in: checksum */ +{ + mach_write_to_4(log_block + OS_FILE_LOG_BLOCK_SIZE + - LOG_BLOCK_CHECKSUM, + checksum); +} + +/**************************************************************** Initializes a log block in the log buffer. */ UNIV_INLINE void @@ -232,7 +260,6 @@ log_block_init( no = log_block_convert_lsn_to_no(lsn); log_block_set_hdr_no(log_block, no); - log_block_set_trl_no(log_block, no); log_block_set_data_len(log_block, LOG_BLOCK_HDR_SIZE); log_block_set_first_rec_group(log_block, 0); @@ -256,7 +283,7 @@ log_block_init_in_old_format( log_block_set_hdr_no(log_block, no); mach_write_to_4(log_block + OS_FILE_LOG_BLOCK_SIZE - - LOG_BLOCK_TRL_NO - 1, no); + - LOG_BLOCK_CHECKSUM, no); log_block_set_data_len(log_block, LOG_BLOCK_HDR_SIZE); log_block_set_first_rec_group(log_block, 0); } |