📄 fsckwsp.h
字号:
* blocks seen */ int64_t unresolved_1stref_count; /* num unresolved first * references to multiply allocated * blocks */ char aggrec_rsvd0[4]; int64_t blocks_for_inodes; /* by fsck's count */ int64_t blocks_for_files; /* by fsck's count */ int64_t blocks_for_dirs; /* by fsck's count */ int64_t blocks_for_eas; /* by fsck's count */ int64_t blocks_for_acls; /* by fsck's count */ uint64_t inodes_in_aggregate; /* by fsck's count */ uint64_t files_in_aggregate; /* by fsck's count */ uint64_t dirs_in_aggregate; /* by fsck's count */ int64_t free_blocks_in_aggregate; /* by fsck's count */ int64_t blocks_used_in_aggregate; /* by fsck's count */ uint64_t blocks_this_fset; /* by fsck's count */ int32_t logredo_rc; /* logredo return code */ int32_t logformat_rc; /* logformat return code */ char aggrec_rsvd2[8]; struct { /* data for the current inode */ char eyecatcher[8]; int64_t all_blks; /* all blocks allocated */ int64_t data_blks; /* blocks allocated to data */ uint64_t data_size; /* byte offset of last data if file */ int64_t ea_blks; /* blocks allocated to EAs */ int64_t acl_blks; /* blocks allocated to ACLs */ uint16_t ea_inline; uint16_t inline_ea_offset; uint16_t inline_ea_length; uint16_t acl_inline; uint16_t inline_acl_offset; uint16_t inline_acl_length; uint16_t in_inode_data_length; /* length of inline data or of * xad list in the inode */ char aggrec_rsvd4[2]; } this_inode; struct wsp_ext_rec *recon_buf_extent; struct recon_buf_record *recon_buf_stack; char agg_imap_eyecatcher[8]; struct fsck_iam_record agg_imap; /* describes the aggregate imap */ char fset_imap_eyecatcher[8]; struct fsck_iam_record fset_imap; /* describes the fileset imap */ uint32_t num_ag; /* number of AGs in the aggregate */ int ag_blk_size; /* aggregate block size */ short int aggrec_rsvd6[1]; char delim_char; /* path delimiter char */ /* unicharacter equivalents */ UniChar *UniChar_lsfn_name; /* equiv to lost+found */ UniChar *UniChar_LSFN_NAME; /* equiv to LOST+FOUND */ /* end of unicharacter equivalents */ int64_t lsfn_dasdused_adjustment; uint32_t lsfn_inonum; /* inode number of /lost+found/ */ uint32_t avail_inonum; /* inode number of an inode * observed to be allocated and not * in use (if any) */ short int parm_options[16]; /* parms specified */ char aggrec_rsvd7[2]; /* pad to quadword boundary */ char effective_msg_level; char aggrec_rsvd8[7]; /* pad to quadword boundary */ char flags_eyecatcher[8]; /* 4 bytes of flags */ unsigned parm_options_nologredo:1; /* first byte, first nibble */ unsigned processing_readonly:1; unsigned processing_readwrite:1; unsigned messaging_verbose:1; unsigned superblk_ok:1; /* first byte, second nibble */ unsigned aggregate_is_mounted:1; unsigned ag_modified:1; unsigned ag_dirty:1; unsigned lsfn_ok:1; /* second byte, first nibble */ unsigned cant_write_primary_sb:1; unsigned cant_write_secondary_sb:1; unsigned cant_write_primary_ait:1; unsigned nonmeta_write_error_msg:1; /* second byte, second nibble */ unsigned fsck_is_done:1; unsigned device_is_open:1; unsigned device_is_locked:1; unsigned primary_ait_4part1:1; /* third byte, first nibble */ unsigned primary_ait_4part2:1; unsigned ait_aim_update_failed:1; unsigned corrections_needed:1; unsigned corrections_approved:1; /* third byte, second nibble */ unsigned avail_inode_found:1; unsigned initializing_fscklog:1; unsigned warning_pending:1; unsigned high_mem_allocated:1; /* fourth byte, first nibble */ unsigned rootdir_rebuilt:1; unsigned active_dasd_limits:1; unsigned stdout_redirected:1; unsigned prime_dasd_limits:1; /* fourth byte, second nibble */ unsigned parm_options_logredo_only:1; unsigned unused_4_2:2; /* end of flag bytes */ int path_buffer_length; /* length of path_buffer */ char *path_buffer; /* storage allocated (if any) for * assembling the string containing * an inode's path for a message */ xtpage_t *prim_nodeptr; /* storage allocated (if any) for * an xtpage of an inode in the Primary Agg * Inode table */ xtpage_t *second_nodeptr; /* storage allocated (if any) for * an xtpage of an inode in the Secondary * Agg Inode table */ int64_t lowest_valid_fset_datablk; /* the lowest (aggregate * blocksized) block in the aggregate * AFTER the blocks used for initial * metadata */ int64_t highest_valid_fset_datablk; /* the highest (aggregate * blocksized) block in the aggregate before * the beginning of the fsck workspace */ struct fsck_inode_ext_record *free_inode_extens; /* available workspace inode record * extensions. */ struct fsck_inode_ext_record *inode_reconn_extens; /* list of inode record * extensions describing the directory * entries to be added when reconnecting * inodes */ struct treeStack_record *treeStack; /* head of the stack used during tree * traversal */ struct treeStack_record *free_treeStack; /* available tree stack elements */ int32_t tree_height; struct dtreeQelem *dtreeQ_front; struct dtreeQelem *dtreeQ_back; struct dtreeQelem *free_dtreeQ; /* available dtree stack elements */ struct treeQelem *treeQ_front; struct treeQelem *treeQ_back; struct treeQelem *free_treeQ; /* available tree stack elements */ struct dupall_blkrec *dup_alloc_lst; /* list of multiply allocated blocks */ struct dupall_blkrec *free_dupall_blkrec; /* free dupall_blkrec records */ struct wsp_ext_rec *wsp_extent_list; /* linked list of records describing * the workspace extents. */ char aggrec_rsvda[4]; /* pad to quadword boundary */ char AIT_eyecatcher[8]; /* */ struct inode_tbl_t *AIT_ext0_tbl; /* ptr to table for Agg Inode Extent 0 */ int32_t agg_last_inoidx; /* used for find first, find next */ char FSIT_eyecatcher[8]; struct IAG_tbl_t *FSIT_IAG_tbl; /* ptr to table for FSet IAGs */ int32_t fs_last_iagidx; /* used for find first, find next */ int32_t fs_last_extidx; /* used for find first, find next */ int32_t fs_last_inoidx; /* used for find first, find next */ struct { /* data for accessing all allocated inodes in an * inode table sequentially */ char eyecatcher[8]; int32_t this_iagnum; /* ordinal of the current iag */ uint32_t this_inoidx; /* ordinal of the current inode */ uint32_t rootleaf_imap; /* 0 => not a rootleaf imap */ xtpage_t *this_mapleaf; /* current mapleaf in buffer */ int32_t iagidx_now; /* index into current mapleaf */ int32_t iagidx_max; struct iag *iagptr; /* current iag in buffer */ uint32_t extidx_now; /* index into current iag */ uint32_t extidx_max; struct dinode *extptr; /* current inode extent in buffer */ uint32_t inoidx_now; /* index into current inode extent */ uint32_t inoidx_max; struct dinode *inoptr; /* current inode in buffer */ } fais; /* (For Allocated Inodes Sequentially */ char aggrec_rsvde[4]; /* pad to quadword boundary */ /* * The fsck I/O buffer information is below. Certain information * is kept for each of the buffers: * * %_buf_ptr = buffer address * %_buf_length = buffer length * %_buf_data_len = length of data read into buffer at last read * %_agg_offset = byte offset in aggregate of buffer contents * %_buf_write = flag: !0 => buffer contents modified since * last write to device * * where % = {blkmp, iag, mapleaf, ino, node, wsp} * * * N.B. To ensure proper boundary alignment, each IO buffersize * must be an even number of pages (i.e. 4096 byte pages). * */ /* ****** very large, multi purpose BUFFER ***** */#define VLARGE_BUFSIZE (2 * MEMSEGSIZE)#define NOT_CURRENTLY_USED 0#define USED_FOR_EA_BUF 1 /* phase 1 late */#define USED_FOR_DIRPAGE_BUFS 2 /* phase 6 */#define USED_FOR_INOEXT_BUF 3 /* phase 1 early, phase 7 */#define USED_FOR_SUPER_VALIDATION 4 /* initial processing */ char vlarge_info_eyecatcher[8]; char *vlarge_buf_ptr; uint32_t vlarge_buf_length; uint32_t vlarge_current_use; char aggrec_rsvdf[4]; /* pad to quadword boundary */ /* ****** fsck log BUFFER ***** */#define FSCKLOG_BUFSIZE (2 * BYTESPERPAGE) char fscklog_info_eyecatcher[8]; struct fsck_blk_map_page *fscklog_buf_ptr; uint32_t fscklog_buf_length; uint32_t fscklog_buf_data_len; int64_t fscklog_agg_offset; int64_t fscklog_log_offset; struct fscklog_entry_hdr *fscklog_last_msghdr; int8_t fscklog_full; int8_t fscklog_buf_allocated; int8_t fscklog_buf_alloc_err; char aggrec_rsvdg[5]; /* pad to quadword boundary */ /* ****** fsck block map BUFFER ***** * * N.B. If the fsck workspace block map is instantiated in * dynamic storage, then the following describe the entire * block map. However, if the fsck workspace block map * is instantiated within the aggregate, then the following * describe the I/O buffer associated with it. */#define BLKMP_IO_BUFSIZE 4 * BYTESPERPAGE char blkmp_info_eyecatcher[8]; struct fsck_blk_map_page *blkmp_buf_ptr; uint32_t blkmp_buf_length; uint32_t blkmp_buf_data_len; int64_t blkmp_agg_offset; int64_t blkmp_blkmp_offset; int8_t blkmp_buf_write; struct fsck_blk_map_hdr *blkmp_ctlptr; int32_t blkmp_pagecount; /* ****** BLOCK MAP DMAP PAGE I/O BUFFER ****** */ /* * note: The EA buffer is treated differently from the * other I/O buffers allocated for fsck. * Specifically, * * - it is larger than any other fsck I/O buffer * (sized to accomodate the largest legal ea) * - since it is exactly 1 memory segment, it is * not allocated as a normal wsp extent (described * by an fer on the wsp_extent_list) but is * allocated as a special case. * - this buffer is released as soon as phase 1 is * completed (does not persist until fsck has * finished processing) * - BTW the EA data is read by fsck, but never * written. */#define EA_IO_BUFSIZE 16*BYTESPERPAGE char ea_info_eyecatcher[8]; char *ea_buf_ptr; uint32_t ea_buf_length; uint32_t ea_buf_data_len; int64_t ea_agg_offset; char aggrec_rsvdh[4]; /* pad to quadword boundary */ /* ****** IAG I/O BUFFER ****** */ /* * note: This is not actually a unique buffer. Since * the Inode Allocation Maps verification is * completed before the Block Allocation Map * verification, buffer space is allocated and * used first for Inode Alloc Map verification * processing and then for Block Allocation Map * verification. */#define IAG_IO_BUFSIZE 4 * BYTESPERPAGE char iag_info_eyecatcher[8]; char *iag_buf_ptr; uint32_t iag_buf_length; uint32_t iag_buf_data_len; int64_t iag_agg_offset; uint32_t iag_buf_1st_inode; /* inode number of 1st in buffer */ uint32_t iag_fsnum; int8_t iag_for_aggregate; int8_t iag_which_it; int8_t iag_buf_write; char aggrec_rsvdi[9]; /* pad to quadword boundary */ /* ****** MAP CONTROL PAGE I/O BUFFER ****** */#define MAPCTL_IO_BUFSIZE BYTESPERPAGE char mapctl_info_eyecatcher[8]; char *mapctl_buf_ptr; uint32_t mapctl_buf_length; uint32_t mapctl_buf_data_len; int64_t mapctl_agg_offset; int8_t mapctl_buf_write; char aggrec_rsvdk[3]; /* pad to quadword boundary */ /* ****** MAP LEAF I/O BUFFER ****** */#define MAPLEAF_IO_BUFSIZE \ ((((XTPAGE_SIZE*4)+BYTESPERPAGE-1)/BYTESPERPAGE)*BYTESPERPAGE) char maplf_info_eyecatcher[8]; char *mapleaf_buf_ptr; uint32_t mapleaf_buf_length; uint32_t mapleaf_buf_data_len; int64_t mapleaf_agg_offset; int8_t mapleaf_for_aggregate; int8_t mapleaf_which_it; int8_t mapleaf_buf_write; char aggrec_rsvdm[1]; /* pad to quadword boundary */ /* ****** BLOCK MAP LEVEL PAGE I/O BUFFER ****** */#define BMAPLV_IO_BUFSIZE BYTESPERPAGE char bmplv_info_eyecatcher[8]; char *bmaplv_buf_ptr; uint32_t bmaplv_buf_length; uint32_t bmaplv_buf_data_len; int64_t bmaplv_agg_offset; int64_t bmaplv_logical_offset; int8_t bmaplv_current_level; int8_t bmaplv_buf_write; char aggrec_rsvdo[10]; /* pad to quadword boundary */ /* ****** BLOCK MAP DMAP PAGE I/O BUFFER ****** */ /* * note: This is not actually a unique buffer. Since * the Inode Allocation Maps verification is * completed before the Block Allocation Map * verification, buffer space is allocated and * used first for Inode Alloc Map verification * processing and then for Block Allocation Map * verification. */#define BMAPDMP_IO_BUFSIZE IAG_IO_BUFSIZE char bmpdm_info_eyecatcher[8]; char *bmapdm_buf_ptr; uint32_t bmapdm_buf_length; uint32_t bmapdm_buf_data_len; int64_t bmapdm_agg_offset; int64_t bmapdm_logical_offset; int8_t bmapdm_buf_write; char aggrec_rsvdq[11]; /* pad to quadword boundary */ /* ****** INODE I/O BUFFER ****** */#define INODE_IO_BUFSIZE \ (((INODE_EXTENT_SIZE+BYTESPERPAGE-1)/BYTESPERPAGE)*BYTESPERPAGE) char inobuf_info_eyecatcher[8]; char *ino_buf_ptr; uint32_t ino_buf_length; uint32_t ino_buf_data_len; int64_t ino_buf_agg_offset; /* agg byte offset of buf contents */ uint32_t ino_buf_1st_ino; /* 1st inode number in buffer */ uint32_t ino_fsnum; pxd_t ino_ixpxd; int8_t ino_for_aggregate; int8_t ino_which_it; int8_t ino_buf_write; char aggrec_rsvds[1]; /* pad to quadword boundary */ /* ****** INTERNAL/LEAF NODE I/O BUFFER ****** */#define NODE_IO_BUFSIZE \ ((((XTPAGE_SIZE*4)+BYTESPERPAGE-1)/BYTESPERPAGE)*BYTESPERPAGE) char nodbuf_info_eyecatcher[8]; char *node_buf_ptr; uint32_t node_buf_length; uint32_t node_buf_data_len; int64_t node_agg_offset; int8_t node_buf_write; char aggrec_rsvdu[3]; /* pad to quadword boundary */ /* ****** INTERNAL/LEAF DNODE I/O BUFFER ****** */ char dnodbuf_info_eyecatcher[8]; char *dnode_buf_ptr; uint32_t dnode_buf_length; uint32_t dnode_buf_data_len; int64_t dnode_agg_offset; int8_t dnode_buf_write; char aggrec_rsvduu[3]; /* pad to quadword boundary */ /* **************************** instantiation of imap AG tables */ char agg_AGTbl_eyecatcher[8]; char aggrec_rsvdw[8]; /* pad to quadword boundary */ struct fsck_ag_record agg_AGTbl[MAXAG]; char fset_AGTbl_eyecatcher[8]; char aggrec_rsvdy[8]; /* pad to quadword boundary */ struct fsck_ag_record fset_AGTbl[MAXAG]; /* ********************** instantiation of imap IAG workspace */ char amap_eyecatcher[8]; uint32_t amap[EXTSPERIAG]; /* 512 : inode allocation map */ char aggrec_rsvd00[8]; /* pad to quadword boundary */ char fextsumm_eyecatcher[8]; int32_t fextsumm[SMAPSZ]; /* 16 : free extent summary map */ char aggrec_rsvd02[8]; /* pad to quadword boundary */ char finosumm_eyecatcher[8]; int32_t finosumm[SMAPSZ]; /* 16 : free inode summary map */ /* ********************** instantiation of blockmap workspace */ struct blkmap_wspace blkmap_wsp;};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -