📄 journal40.h
字号:
/* Copyright (C) 2001-2005 by Hans Reiser, licensing governed by reiser4progs/COPYING. journal40.h -- reiser4 default journal plugin. */#ifndef JOURNAL40_H#define JOURNAL40_H#ifndef ENABLE_MINIMAL#include <aal/libaal.h>#include <reiser4/plugin.h>#define JOURNAL40_BLOCKNR(blksize) \ (REISER4_MASTER_BLOCKNR(blksize) + 3)extern reiser4_journal_plug_t journal40_plug;typedef struct journal40_area { blk_t start; count_t len;} journal40_area_t;typedef struct journal40 { reiser4_journal_plug_t *plug; /* Filesystem blocksize */ uint32_t blksize; /* Journal state (dirty, etc). */ uint32_t state; /* Joirnal device */ aal_device_t *device; /* Format instance */ reiser4_format_ent_t *format; /* Oid instance */ reiser4_oid_ent_t *oid; /* Area on device, journal may occupie it. */ journal40_area_t area; /* Journal header and footer */ aal_block_t *header; aal_block_t *footer;} journal40_t;typedef struct journal40_header { d64_t jh_last_commited;} journal40_header_t;#define PLUG_ENT(p) ((journal40_t *)p)#define get_jh_last_commited(jh) aal_get_le64(jh, jh_last_commited)#define set_jh_last_commited(jh, val) aal_set_le64(jh, jh_last_commited, val)typedef struct journal40_footer { d64_t jf_last_flushed; d64_t jf_free_blocks; d64_t jf_used_oids; d64_t jf_next_oid;} journal40_footer_t;#define get_jf_last_flushed(jf) aal_get_le64(jf, jf_last_flushed)#define set_jf_last_flushed(jf, val) aal_set_le64(jf, jf_last_flushed, val)#define get_jf_free_blocks(jf) aal_get_le64(jf, jf_free_blocks)#define set_jf_free_blocks(jf, val) aal_set_le64(jf, jf_free_blocks, val)#define get_jf_used_oids(jf) aal_get_le64(jf, jf_used_oids)#define set_jf_used_oids(jf, val) aal_set_le64(jf, jf_used_oids, val)#define get_jf_next_oid(jf) aal_get_le64(jf, jf_next_oid)#define set_jf_next_oid(jf, val) aal_set_le64(jf, jf_next_oid, val)#define TXH_MAGIC "TxMagic4"#define LGR_MAGIC "LogMagc4"#define TXH_MAGIC_SIZE 8#define LGR_MAGIC_SIZE 8typedef struct journal40_tx_header { char magic[TXH_MAGIC_SIZE]; d64_t th_id; d32_t th_total; d32_t th_padding; d64_t th_prev_tx; d64_t th_next_block; d64_t th_free_blocks; d64_t th_used_oids; d64_t th_next_oid;} journal40_tx_header_t;#define get_th_id(th) aal_get_le64(th, th_id)#define set_th_id(th, val) aal_set_le64(th, th_id, val)#define get_th_total(th) aal_get_le32(th, th_total)#define set_th_total(th, val) aal_set_le32(th, th_total, val)#define get_th_prev_tx(th) aal_get_le64(th, th_prev_tx)#define set_th_prev_tx(th, val) aal_set_le64(th, th_prev_tx, val)#define get_th_next_block(th) aal_get_le64(th, th_next_block)#define set_th_next_block(th, val) aal_set_le64(th, th_next_block, val)#define get_th_free_blocks(th) aal_get_le64(th, th_free_blocks)#define set_th_free_blocks(th, val) aal_set_le64(th, th_free_blocks, val)#define get_th_used_oids(th) aal_get_le64(th, th_used_oids)#define set_th_used_oids(th, val) aal_set_le64(th, th_used_oids, val)#define get_th_next_oid(th) aal_get_le64(th, th_next_oid)#define set_th_next_oid(th, val) aal_set_le64(th, th_next_oid, val)typedef struct journal40_lr_header { char magic[LGR_MAGIC_SIZE]; d64_t lh_id; d32_t lh_total; d32_t lh_serial; d64_t lh_next_block;} journal40_lr_header_t;#define get_lh_id(lh) aal_get_le64(lh, lh_id)#define set_lh_id(lh, val) aal_set_le64(lh, lh_id, val)#define get_lh_total(lh) aal_get_le32(lh, lh_total)#define set_lh_total(lh, val) aal_set_le32(lh, lh_total, val)#define get_lh_serial(lh) aal_get_le32(lh, lh_serial)#define set_lh_serial(lh, val) aal_set_le32(lh, lh_serial, val)#define get_lh_next_block(lh) aal_get_le64(lh, lh_next_block)#define set_lh_next_block(lh, val) aal_set_le64(lh, lh_next_block, val)typedef struct journal40_lr_entry { d64_t le_original; d64_t le_wandered;} journal40_lr_entry_t;typedef enum journal40_block { JB_INV = 0x0, JB_TXH = 0x1, JB_LGR = 0x2, JB_WAN = 0x3, JB_ORG = 0x4, JB_LST} journal40_block_t;#define get_le_original(le) aal_get_le64(le, le_original)#define set_le_original(le, val) aal_set_le64(le, le_original, val)#define get_le_wandered(le) aal_get_le64(le, le_wandered)#define set_le_wandered(le, val) aal_set_le64(le, le_wandered, val)typedef errno_t (*journal40_txh_func_t) (reiser4_journal_ent_t *, blk_t, void *);typedef errno_t (*journal40_sec_func_t) (reiser4_journal_ent_t *, aal_block_t *,\ blk_t, journal40_block_t, void *);typedef errno_t (*journal40_han_func_t) (reiser4_journal_ent_t *, aal_block_t *, blk_t, void *);#define JFOOTER(block) ((journal40_footer_t *)block->data)#define JHEADER(block) ((journal40_header_t *)block->data)#endifextern errno_t journal40_traverse(reiser4_journal_ent_t *entity, journal40_txh_func_t txh_func, journal40_han_func_t han_func, journal40_sec_func_t sec_func, void *data);extern errno_t journal40_traverse_trans(reiser4_journal_ent_t *entity, aal_block_t *tx_block, journal40_han_func_t han_func, journal40_sec_func_t sec_func, void *data);extern aal_device_t *journal40_device(reiser4_journal_ent_t *entity);#define journal40_mkdirty(journal) \ ((journal40_t *)journal)->state |= (1 << ENTITY_DIRTY);#define journal40_mkclean(journal) \ ((journal40_t *)journal)->state &= ~(1 << ENTITY_DIRTY);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -