]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - repair/globals.h
9a9465f59bddbf2298335df27fa7d50a20c6377c
[thirdparty/xfsprogs-dev.git] / repair / globals.h
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
4 * All Rights Reserved.
5 */
6
7 #ifndef _XFS_REPAIR_GLOBAL_H
8 #define _XFS_REPAIR_GLOBAL_H
9
10 #ifndef EXTERN
11 #define EXTERN extern
12 #endif
13
14 /* useful macros */
15
16 #define rounddown(x, y) (((x)/(y))*(y))
17
18 /* error flags */
19
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 */
44
45 /* XFS filesystem (il)legal values */
46
47 #define XR_LOG2BSIZE_MIN 9 /* min/max fs blocksize (log2) */
48 #define XR_LOG2BSIZE_MAX 16 /* 2^XR_* == blocksize */
49
50 #define NUM_AGH_SECTS 4 /* # of components in an ag header */
51
52 /* global variables for xfs_repair */
53
54 /* arguments and argument flag variables */
55
56 EXTERN char *fs_name; /* name of filesystem */
57 EXTERN int verbose; /* verbose flag, mostly for debugging */
58
59
60 /* for reading stuff in manually (bypassing libsim) */
61
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;
67
68 /* direct I/O info */
69
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 */
73
74 /* file descriptors */
75
76 EXTERN int fs_fd; /* filesystem fd */
77
78 /* command-line flags */
79
80 EXTERN int verbose;
81 EXTERN int no_modify;
82 EXTERN int dangerously; /* live dangerously ... fix ro mount */
83 EXTERN int isa_file;
84 EXTERN int zap_log;
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 */
94
95 /* misc status variables */
96
97 EXTERN int primary_sb_modified;
98 EXTERN int bad_ino_btree;
99 EXTERN int copied_sunit;
100 EXTERN int fs_is_dirty;
101
102 /* for hunting down the root inode */
103
104 EXTERN int need_root_inode;
105 EXTERN int need_root_dotdot;
106
107 EXTERN int need_rbmino;
108 EXTERN int need_rsumino;
109
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;
117
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;
123
124 /* configuration vars -- fs geometry dependent */
125
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;
132
133 /* realtime info */
134
135 EXTERN xfs_rtword_t *btmcompute;
136 EXTERN xfs_suminfo_t *sumcompute;
137
138 /* inode tree records have full or partial backptr fields ? */
139
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
145 */
146
147 #define ORPHANAGE "lost+found"
148
149 /* superblock counters */
150
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 */
155
156 /* superblock geometry info */
157
158 EXTERN xfs_extlen_t sb_inoalignmt;
159 EXTERN uint32_t sb_unit;
160 EXTERN uint32_t sb_width;
161
162 struct aglock {
163 pthread_mutex_t lock __attribute__((__aligned__(64)));
164 };
165 EXTERN struct aglock *ag_locks;
166
167 EXTERN int report_interval;
168 EXTERN uint64_t *prog_rpt_done;
169
170 EXTERN int ag_stride;
171 EXTERN int thread_count;
172
173 #endif /* _XFS_REPAIR_GLOBAL_H */