1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
7 #ifndef _XFS_REPAIR_GLOBAL_H
8 #define _XFS_REPAIR_GLOBAL_H
16 #define rounddown(x, y) (((x)/(y))*(y))
20 #define XR_OK 0 /* good */
21 #define XR_BAD_MAGIC 1 /* bad magic number */
22 #define XR_BAD_BLOCKSIZE 2 /* bad block size */
23 #define XR_BAD_BLOCKLOG 3 /* bad sb_blocklog field */
24 #define XR_BAD_VERSION 4 /* bad version number */
25 #define XR_BAD_INPROGRESS 5 /* in progress set */
26 #define XR_BAD_FS_SIZE_DATA 6 /* ag sizes, number, fs size mismatch */
27 #define XR_BAD_INO_SIZE_DATA 7 /* bad inode size or perblock fields */
28 #define XR_BAD_SECT_SIZE_DATA 8 /* bad sector size info */
29 #define XR_AGF_GEO_MISMATCH 9 /* agf info conflicts with sb */
30 #define XR_AGI_GEO_MISMATCH 10 /* agf info conflicts with sb */
31 #define XR_SB_GEO_MISMATCH 11 /* sb geo conflicts with fs sb geo */
32 #define XR_EOF 12 /* seeked beyond EOF */
33 #define XR_BAD_RT_GEO_DATA 13 /* realtime geometry inconsistent */
34 #define XR_BAD_INO_MAX_PCT 14 /* max % of inodes > 100% */
35 #define XR_BAD_INO_ALIGN 15 /* bad inode alignment value */
36 #define XR_INSUFF_SEC_SB 16 /* not enough matching secondary sbs */
37 #define XR_BAD_SB_UNIT 17 /* bad stripe unit */
38 #define XR_BAD_SB_WIDTH 18 /* bad stripe width */
39 #define XR_BAD_SVN 19 /* bad shared version number */
40 #define XR_BAD_CRC 20 /* Bad CRC */
41 #define XR_BAD_DIR_SIZE_DATA 21 /* Bad directory geometry */
42 #define XR_BAD_LOG_GEOMETRY 22 /* Bad log geometry */
43 #define XR_BAD_ERR_CODE 23 /* Bad error code */
45 /* XFS filesystem (il)legal values */
47 #define XR_LOG2BSIZE_MIN 9 /* min/max fs blocksize (log2) */
48 #define XR_LOG2BSIZE_MAX 16 /* 2^XR_* == blocksize */
50 #define NUM_AGH_SECTS 4 /* # of components in an ag header */
52 /* global variables for xfs_repair */
54 /* arguments and argument flag variables */
56 EXTERN
char *fs_name
; /* name of filesystem */
57 EXTERN
int verbose
; /* verbose flag, mostly for debugging */
60 /* for reading stuff in manually (bypassing libsim) */
62 EXTERN
char *iobuf
; /* large buffer */
63 EXTERN
int iobuf_size
;
64 EXTERN
char *smallbuf
; /* small (1-4 page) buffer */
65 EXTERN
int smallbuf_size
;
66 EXTERN
int sbbuf_size
;
70 EXTERN
int minio_align
; /* min I/O size and alignment */
71 EXTERN
int mem_align
; /* memory alignment */
72 EXTERN
int max_iosize
; /* max I/O size */
74 /* file descriptors */
76 EXTERN
int fs_fd
; /* filesystem fd */
78 /* command-line flags */
82 EXTERN
int dangerously
; /* live dangerously ... fix ro mount */
85 EXTERN
int dumpcore
; /* abort, not exit on fatal errs */
86 EXTERN
int force_geo
; /* can set geo on low confidence info */
87 EXTERN
int assume_xfs
; /* assume we have an xfs fs */
88 EXTERN
char *log_name
; /* Name of log device */
89 EXTERN
int log_spec
; /* Log dev specified as option */
90 EXTERN
char *rt_name
; /* Name of realtime device */
91 EXTERN
int rt_spec
; /* Realtime dev specified as option */
92 EXTERN
int convert_lazy_count
; /* Convert lazy-count mode on/off */
93 EXTERN
int lazy_count
; /* What to set if to if converting */
95 /* misc status variables */
97 EXTERN
int primary_sb_modified
;
98 EXTERN
int bad_ino_btree
;
99 EXTERN
int copied_sunit
;
100 EXTERN
int fs_is_dirty
;
102 /* for hunting down the root inode */
104 EXTERN
int need_root_inode
;
105 EXTERN
int need_root_dotdot
;
107 EXTERN
int need_rbmino
;
108 EXTERN
int need_rsumino
;
110 EXTERN
int lost_quotas
;
111 EXTERN
int have_uquotino
;
112 EXTERN
int have_gquotino
;
113 EXTERN
int have_pquotino
;
114 EXTERN
int lost_uquotino
;
115 EXTERN
int lost_gquotino
;
116 EXTERN
int lost_pquotino
;
118 EXTERN xfs_agino_t first_prealloc_ino
;
119 EXTERN xfs_agino_t last_prealloc_ino
;
120 EXTERN xfs_agblock_t bnobt_root
;
121 EXTERN xfs_agblock_t bcntbt_root
;
122 EXTERN xfs_agblock_t inobt_root
;
124 /* configuration vars -- fs geometry dependent */
126 EXTERN
int inodes_per_block
;
127 EXTERN
int inodes_per_cluster
;
128 EXTERN
unsigned int glob_agcount
;
129 EXTERN
int chunks_pblock
; /* # of 64-ino chunks per allocation */
130 EXTERN
int max_symlink_blocks
;
131 EXTERN
int64_t fs_max_file_offset
;
135 EXTERN xfs_rtword_t
*btmcompute
;
136 EXTERN xfs_suminfo_t
*sumcompute
;
138 /* inode tree records have full or partial backptr fields ? */
140 EXTERN
int full_ino_ex_data
;/*
141 * if 1, use ino_ex_data_t component
142 * of ino_un union, if 0, use
143 * parent_list_t component. see
144 * incore.h for more details
147 #define ORPHANAGE "lost+found"
149 /* superblock counters */
151 EXTERN
uint64_t sb_icount
; /* allocated (made) inodes */
152 EXTERN
uint64_t sb_ifree
; /* free inodes */
153 EXTERN
uint64_t sb_fdblocks
; /* free data blocks */
154 EXTERN
uint64_t sb_frextents
; /* free realtime extents */
156 /* superblock geometry info */
158 EXTERN xfs_extlen_t sb_inoalignmt
;
159 EXTERN
uint32_t sb_unit
;
160 EXTERN
uint32_t sb_width
;
163 pthread_mutex_t lock
__attribute__((__aligned__(64)));
165 EXTERN
struct aglock
*ag_locks
;
167 EXTERN
int report_interval
;
168 EXTERN
uint64_t *prog_rpt_done
;
170 EXTERN
int ag_stride
;
171 EXTERN
int thread_count
;
173 #endif /* _XFS_REPAIR_GLOBAL_H */