~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/xfs/scrub/repair.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /*
  3  * Copyright (C) 2018-2023 Oracle.  All Rights Reserved.
  4  * Author: Darrick J. Wong <djwong@kernel.org>
  5  */
  6 #ifndef __XFS_SCRUB_REPAIR_H__
  7 #define __XFS_SCRUB_REPAIR_H__
  8 
  9 #include "xfs_quota_defs.h"
 10 
 11 struct xchk_stats_run;
 12 
 13 static inline int xrep_notsupported(struct xfs_scrub *sc)
 14 {
 15         return -EOPNOTSUPP;
 16 }
 17 
 18 #ifdef CONFIG_XFS_ONLINE_REPAIR
 19 
 20 /*
 21  * This is the maximum number of deferred extent freeing item extents (EFIs)
 22  * that we'll attach to a transaction without rolling the transaction to avoid
 23  * overrunning a tr_itruncate reservation.
 24  */
 25 #define XREP_MAX_ITRUNCATE_EFIS (128)
 26 
 27 
 28 /* Repair helpers */
 29 
 30 int xrep_attempt(struct xfs_scrub *sc, struct xchk_stats_run *run);
 31 bool xrep_will_attempt(struct xfs_scrub *sc);
 32 void xrep_failure(struct xfs_mount *mp);
 33 int xrep_roll_ag_trans(struct xfs_scrub *sc);
 34 int xrep_roll_trans(struct xfs_scrub *sc);
 35 int xrep_defer_finish(struct xfs_scrub *sc);
 36 bool xrep_ag_has_space(struct xfs_perag *pag, xfs_extlen_t nr_blocks,
 37                 enum xfs_ag_resv_type type);
 38 xfs_extlen_t xrep_calc_ag_resblks(struct xfs_scrub *sc);
 39 
 40 static inline int
 41 xrep_trans_commit(
 42         struct xfs_scrub        *sc)
 43 {
 44         int error = xfs_trans_commit(sc->tp);
 45 
 46         sc->tp = NULL;
 47         return error;
 48 }
 49 
 50 struct xbitmap;
 51 struct xagb_bitmap;
 52 struct xfsb_bitmap;
 53 
 54 int xrep_fix_freelist(struct xfs_scrub *sc, int alloc_flags);
 55 
 56 struct xrep_find_ag_btree {
 57         /* in: rmap owner of the btree we're looking for */
 58         uint64_t                        rmap_owner;
 59 
 60         /* in: buffer ops */
 61         const struct xfs_buf_ops        *buf_ops;
 62 
 63         /* in: maximum btree height */
 64         unsigned int                    maxlevels;
 65 
 66         /* out: the highest btree block found and the tree height */
 67         xfs_agblock_t                   root;
 68         unsigned int                    height;
 69 };
 70 
 71 int xrep_find_ag_btree_roots(struct xfs_scrub *sc, struct xfs_buf *agf_bp,
 72                 struct xrep_find_ag_btree *btree_info, struct xfs_buf *agfl_bp);
 73 
 74 #ifdef CONFIG_XFS_QUOTA
 75 void xrep_update_qflags(struct xfs_scrub *sc, unsigned int clear_flags,
 76                 unsigned int set_flags);
 77 void xrep_force_quotacheck(struct xfs_scrub *sc, xfs_dqtype_t type);
 78 int xrep_ino_dqattach(struct xfs_scrub *sc);
 79 #else
 80 # define xrep_force_quotacheck(sc, type)        ((void)0)
 81 # define xrep_ino_dqattach(sc)                  (0)
 82 #endif /* CONFIG_XFS_QUOTA */
 83 
 84 int xrep_setup_xfbtree(struct xfs_scrub *sc, const char *descr);
 85 
 86 int xrep_ino_ensure_extent_count(struct xfs_scrub *sc, int whichfork,
 87                 xfs_extnum_t nextents);
 88 int xrep_reset_perag_resv(struct xfs_scrub *sc);
 89 int xrep_bmap(struct xfs_scrub *sc, int whichfork, bool allow_unwritten);
 90 int xrep_metadata_inode_forks(struct xfs_scrub *sc);
 91 int xrep_setup_ag_rmapbt(struct xfs_scrub *sc);
 92 int xrep_setup_ag_refcountbt(struct xfs_scrub *sc);
 93 int xrep_setup_xattr(struct xfs_scrub *sc);
 94 int xrep_setup_directory(struct xfs_scrub *sc);
 95 int xrep_setup_parent(struct xfs_scrub *sc);
 96 int xrep_setup_nlinks(struct xfs_scrub *sc);
 97 int xrep_setup_symlink(struct xfs_scrub *sc, unsigned int *resblks);
 98 int xrep_setup_dirtree(struct xfs_scrub *sc);
 99 
100 /* Repair setup functions */
101 int xrep_setup_ag_allocbt(struct xfs_scrub *sc);
102 
103 struct xfs_imap;
104 int xrep_setup_inode(struct xfs_scrub *sc, const struct xfs_imap *imap);
105 
106 void xrep_ag_btcur_init(struct xfs_scrub *sc, struct xchk_ag *sa);
107 int xrep_ag_init(struct xfs_scrub *sc, struct xfs_perag *pag,
108                 struct xchk_ag *sa);
109 
110 /* Metadata revalidators */
111 
112 int xrep_revalidate_allocbt(struct xfs_scrub *sc);
113 int xrep_revalidate_iallocbt(struct xfs_scrub *sc);
114 
115 /* Metadata repairers */
116 
117 int xrep_probe(struct xfs_scrub *sc);
118 int xrep_superblock(struct xfs_scrub *sc);
119 int xrep_agf(struct xfs_scrub *sc);
120 int xrep_agfl(struct xfs_scrub *sc);
121 int xrep_agi(struct xfs_scrub *sc);
122 int xrep_allocbt(struct xfs_scrub *sc);
123 int xrep_iallocbt(struct xfs_scrub *sc);
124 int xrep_rmapbt(struct xfs_scrub *sc);
125 int xrep_refcountbt(struct xfs_scrub *sc);
126 int xrep_inode(struct xfs_scrub *sc);
127 int xrep_bmap_data(struct xfs_scrub *sc);
128 int xrep_bmap_attr(struct xfs_scrub *sc);
129 int xrep_bmap_cow(struct xfs_scrub *sc);
130 int xrep_nlinks(struct xfs_scrub *sc);
131 int xrep_fscounters(struct xfs_scrub *sc);
132 int xrep_xattr(struct xfs_scrub *sc);
133 int xrep_directory(struct xfs_scrub *sc);
134 int xrep_parent(struct xfs_scrub *sc);
135 int xrep_symlink(struct xfs_scrub *sc);
136 int xrep_dirtree(struct xfs_scrub *sc);
137 
138 #ifdef CONFIG_XFS_RT
139 int xrep_rtbitmap(struct xfs_scrub *sc);
140 int xrep_rtsummary(struct xfs_scrub *sc);
141 #else
142 # define xrep_rtbitmap                  xrep_notsupported
143 # define xrep_rtsummary                 xrep_notsupported
144 #endif /* CONFIG_XFS_RT */
145 
146 #ifdef CONFIG_XFS_QUOTA
147 int xrep_quota(struct xfs_scrub *sc);
148 int xrep_quotacheck(struct xfs_scrub *sc);
149 #else
150 # define xrep_quota                     xrep_notsupported
151 # define xrep_quotacheck                xrep_notsupported
152 #endif /* CONFIG_XFS_QUOTA */
153 
154 int xrep_reinit_pagf(struct xfs_scrub *sc);
155 int xrep_reinit_pagi(struct xfs_scrub *sc);
156 
157 int xrep_trans_alloc_hook_dummy(struct xfs_mount *mp, void **cookiep,
158                 struct xfs_trans **tpp);
159 void xrep_trans_cancel_hook_dummy(void **cookiep, struct xfs_trans *tp);
160 
161 bool xrep_buf_verify_struct(struct xfs_buf *bp, const struct xfs_buf_ops *ops);
162 
163 #else
164 
165 #define xrep_ino_dqattach(sc)   (0)
166 #define xrep_will_attempt(sc)   (false)
167 
168 static inline int
169 xrep_attempt(
170         struct xfs_scrub        *sc,
171         struct xchk_stats_run   *run)
172 {
173         return -EOPNOTSUPP;
174 }
175 
176 static inline void xrep_failure(struct xfs_mount *mp) {}
177 
178 static inline xfs_extlen_t
179 xrep_calc_ag_resblks(
180         struct xfs_scrub        *sc)
181 {
182         return 0;
183 }
184 
185 static inline int
186 xrep_reset_perag_resv(
187         struct xfs_scrub        *sc)
188 {
189         if (!(sc->flags & XREP_RESET_PERAG_RESV))
190                 return 0;
191 
192         ASSERT(0);
193         return -EOPNOTSUPP;
194 }
195 
196 /* repair setup functions for no-repair */
197 static inline int
198 xrep_setup_nothing(
199         struct xfs_scrub        *sc)
200 {
201         return 0;
202 }
203 #define xrep_setup_ag_allocbt           xrep_setup_nothing
204 #define xrep_setup_ag_rmapbt            xrep_setup_nothing
205 #define xrep_setup_ag_refcountbt        xrep_setup_nothing
206 #define xrep_setup_xattr                xrep_setup_nothing
207 #define xrep_setup_directory            xrep_setup_nothing
208 #define xrep_setup_parent               xrep_setup_nothing
209 #define xrep_setup_nlinks               xrep_setup_nothing
210 #define xrep_setup_dirtree              xrep_setup_nothing
211 
212 #define xrep_setup_inode(sc, imap)      ((void)0)
213 
214 static inline int xrep_setup_symlink(struct xfs_scrub *sc, unsigned int *x)
215 {
216         return 0;
217 }
218 
219 #define xrep_revalidate_allocbt         (NULL)
220 #define xrep_revalidate_iallocbt        (NULL)
221 
222 #define xrep_probe                      xrep_notsupported
223 #define xrep_superblock                 xrep_notsupported
224 #define xrep_agf                        xrep_notsupported
225 #define xrep_agfl                       xrep_notsupported
226 #define xrep_agi                        xrep_notsupported
227 #define xrep_allocbt                    xrep_notsupported
228 #define xrep_iallocbt                   xrep_notsupported
229 #define xrep_rmapbt                     xrep_notsupported
230 #define xrep_refcountbt                 xrep_notsupported
231 #define xrep_inode                      xrep_notsupported
232 #define xrep_bmap_data                  xrep_notsupported
233 #define xrep_bmap_attr                  xrep_notsupported
234 #define xrep_bmap_cow                   xrep_notsupported
235 #define xrep_rtbitmap                   xrep_notsupported
236 #define xrep_quota                      xrep_notsupported
237 #define xrep_quotacheck                 xrep_notsupported
238 #define xrep_nlinks                     xrep_notsupported
239 #define xrep_fscounters                 xrep_notsupported
240 #define xrep_rtsummary                  xrep_notsupported
241 #define xrep_xattr                      xrep_notsupported
242 #define xrep_directory                  xrep_notsupported
243 #define xrep_parent                     xrep_notsupported
244 #define xrep_symlink                    xrep_notsupported
245 #define xrep_dirtree                    xrep_notsupported
246 
247 #endif /* CONFIG_XFS_ONLINE_REPAIR */
248 
249 #endif  /* __XFS_SCRUB_REPAIR_H__ */
250 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php