2023-04-11 18:59:56 -07:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2018-05-14 06:34:36 -07:00
|
|
|
/*
|
2023-04-11 18:59:57 -07:00
|
|
|
* Copyright (C) 2018-2023 Oracle. All Rights Reserved.
|
2023-04-11 18:59:56 -07:00
|
|
|
* Author: Darrick J. Wong <djwong@kernel.org>
|
2018-05-14 06:34:36 -07:00
|
|
|
*/
|
|
|
|
#ifndef __XFS_SCRUB_REPAIR_H__
|
|
|
|
#define __XFS_SCRUB_REPAIR_H__
|
|
|
|
|
2020-07-15 17:53:43 -07:00
|
|
|
#include "xfs_quota_defs.h"
|
|
|
|
|
2024-11-03 20:19:06 -08:00
|
|
|
struct xfs_rtgroup;
|
2023-08-10 07:48:07 -07:00
|
|
|
struct xchk_stats_run;
|
|
|
|
|
2018-07-19 12:29:12 -07:00
|
|
|
static inline int xrep_notsupported(struct xfs_scrub *sc)
|
2018-05-14 06:34:36 -07:00
|
|
|
{
|
|
|
|
return -EOPNOTSUPP;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef CONFIG_XFS_ONLINE_REPAIR
|
|
|
|
|
2023-08-10 07:48:04 -07:00
|
|
|
/*
|
|
|
|
* This is the maximum number of deferred extent freeing item extents (EFIs)
|
|
|
|
* that we'll attach to a transaction without rolling the transaction to avoid
|
|
|
|
* overrunning a tr_itruncate reservation.
|
|
|
|
*/
|
|
|
|
#define XREP_MAX_ITRUNCATE_EFIS (128)
|
|
|
|
|
|
|
|
|
2018-05-14 06:34:36 -07:00
|
|
|
/* Repair helpers */
|
|
|
|
|
2023-08-10 07:48:07 -07:00
|
|
|
int xrep_attempt(struct xfs_scrub *sc, struct xchk_stats_run *run);
|
2023-12-15 10:03:39 -08:00
|
|
|
bool xrep_will_attempt(struct xfs_scrub *sc);
|
2018-07-19 12:29:11 -07:00
|
|
|
void xrep_failure(struct xfs_mount *mp);
|
2018-07-19 12:29:12 -07:00
|
|
|
int xrep_roll_ag_trans(struct xfs_scrub *sc);
|
2023-12-15 10:03:36 -08:00
|
|
|
int xrep_roll_trans(struct xfs_scrub *sc);
|
2023-08-10 07:48:04 -07:00
|
|
|
int xrep_defer_finish(struct xfs_scrub *sc);
|
2018-07-19 12:29:11 -07:00
|
|
|
bool xrep_ag_has_space(struct xfs_perag *pag, xfs_extlen_t nr_blocks,
|
2018-05-29 22:18:08 -07:00
|
|
|
enum xfs_ag_resv_type type);
|
2018-07-19 12:29:12 -07:00
|
|
|
xfs_extlen_t xrep_calc_ag_resblks(struct xfs_scrub *sc);
|
2018-05-14 06:34:36 -07:00
|
|
|
|
2023-12-15 10:03:36 -08:00
|
|
|
static inline int
|
|
|
|
xrep_trans_commit(
|
|
|
|
struct xfs_scrub *sc)
|
|
|
|
{
|
|
|
|
int error = xfs_trans_commit(sc->tp);
|
|
|
|
|
|
|
|
sc->tp = NULL;
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
2020-03-16 17:13:05 -07:00
|
|
|
struct xbitmap;
|
2023-04-11 19:00:37 -07:00
|
|
|
struct xagb_bitmap;
|
2024-11-20 16:21:13 -08:00
|
|
|
struct xrgb_bitmap;
|
2023-12-15 10:03:38 -08:00
|
|
|
struct xfsb_bitmap;
|
2024-11-20 16:21:16 -08:00
|
|
|
struct xrtb_bitmap;
|
2018-05-29 22:18:09 -07:00
|
|
|
|
2024-02-22 12:43:38 -08:00
|
|
|
int xrep_fix_freelist(struct xfs_scrub *sc, int alloc_flags);
|
2018-05-29 22:18:09 -07:00
|
|
|
|
2018-07-19 12:29:11 -07:00
|
|
|
struct xrep_find_ag_btree {
|
2018-05-29 22:18:10 -07:00
|
|
|
/* in: rmap owner of the btree we're looking for */
|
|
|
|
uint64_t rmap_owner;
|
|
|
|
|
|
|
|
/* in: buffer ops */
|
|
|
|
const struct xfs_buf_ops *buf_ops;
|
|
|
|
|
2021-09-16 12:21:56 -07:00
|
|
|
/* in: maximum btree height */
|
|
|
|
unsigned int maxlevels;
|
|
|
|
|
2018-05-29 22:18:10 -07:00
|
|
|
/* out: the highest btree block found and the tree height */
|
|
|
|
xfs_agblock_t root;
|
|
|
|
unsigned int height;
|
|
|
|
};
|
|
|
|
|
2018-07-19 12:29:12 -07:00
|
|
|
int xrep_find_ag_btree_roots(struct xfs_scrub *sc, struct xfs_buf *agf_bp,
|
|
|
|
struct xrep_find_ag_btree *btree_info, struct xfs_buf *agfl_bp);
|
2023-12-15 10:03:33 -08:00
|
|
|
|
|
|
|
#ifdef CONFIG_XFS_QUOTA
|
2024-02-22 12:30:57 -08:00
|
|
|
void xrep_update_qflags(struct xfs_scrub *sc, unsigned int clear_flags,
|
|
|
|
unsigned int set_flags);
|
2020-07-15 17:53:43 -07:00
|
|
|
void xrep_force_quotacheck(struct xfs_scrub *sc, xfs_dqtype_t type);
|
2018-07-19 12:29:12 -07:00
|
|
|
int xrep_ino_dqattach(struct xfs_scrub *sc);
|
2023-12-15 10:03:33 -08:00
|
|
|
#else
|
|
|
|
# define xrep_force_quotacheck(sc, type) ((void)0)
|
|
|
|
# define xrep_ino_dqattach(sc) (0)
|
|
|
|
#endif /* CONFIG_XFS_QUOTA */
|
|
|
|
|
2024-02-22 12:43:39 -08:00
|
|
|
int xrep_setup_xfbtree(struct xfs_scrub *sc, const char *descr);
|
|
|
|
|
2023-12-15 10:03:36 -08:00
|
|
|
int xrep_ino_ensure_extent_count(struct xfs_scrub *sc, int whichfork,
|
|
|
|
xfs_extnum_t nextents);
|
2023-12-15 10:03:32 -08:00
|
|
|
int xrep_reset_perag_resv(struct xfs_scrub *sc);
|
2023-12-15 10:03:42 -08:00
|
|
|
int xrep_bmap(struct xfs_scrub *sc, int whichfork, bool allow_unwritten);
|
|
|
|
int xrep_metadata_inode_forks(struct xfs_scrub *sc);
|
2024-02-22 12:43:38 -08:00
|
|
|
int xrep_setup_ag_rmapbt(struct xfs_scrub *sc);
|
2024-02-22 12:43:42 -08:00
|
|
|
int xrep_setup_ag_refcountbt(struct xfs_scrub *sc);
|
2024-04-15 14:54:45 -07:00
|
|
|
int xrep_setup_xattr(struct xfs_scrub *sc);
|
2024-04-15 14:54:51 -07:00
|
|
|
int xrep_setup_directory(struct xfs_scrub *sc);
|
2024-04-15 14:54:53 -07:00
|
|
|
int xrep_setup_parent(struct xfs_scrub *sc);
|
2024-04-15 14:54:56 -07:00
|
|
|
int xrep_setup_nlinks(struct xfs_scrub *sc);
|
2024-04-15 14:54:59 -07:00
|
|
|
int xrep_setup_symlink(struct xfs_scrub *sc, unsigned int *resblks);
|
2024-04-22 09:48:22 -07:00
|
|
|
int xrep_setup_dirtree(struct xfs_scrub *sc);
|
2024-11-20 16:20:42 -08:00
|
|
|
int xrep_setup_rtrmapbt(struct xfs_scrub *sc);
|
2024-11-20 16:21:14 -08:00
|
|
|
int xrep_setup_rtrefcountbt(struct xfs_scrub *sc);
|
2018-05-29 22:18:10 -07:00
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
/* Repair setup functions */
|
|
|
|
int xrep_setup_ag_allocbt(struct xfs_scrub *sc);
|
|
|
|
|
2023-12-15 10:03:36 -08:00
|
|
|
struct xfs_imap;
|
|
|
|
int xrep_setup_inode(struct xfs_scrub *sc, const struct xfs_imap *imap);
|
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
void xrep_ag_btcur_init(struct xfs_scrub *sc, struct xchk_ag *sa);
|
2023-12-15 10:03:39 -08:00
|
|
|
int xrep_ag_init(struct xfs_scrub *sc, struct xfs_perag *pag,
|
|
|
|
struct xchk_ag *sa);
|
2024-11-03 20:19:06 -08:00
|
|
|
#ifdef CONFIG_XFS_RT
|
|
|
|
int xrep_rtgroup_init(struct xfs_scrub *sc, struct xfs_rtgroup *rtg,
|
|
|
|
struct xchk_rt *sr, unsigned int rtglock_flags);
|
2024-11-20 16:20:41 -08:00
|
|
|
void xrep_rtgroup_btcur_init(struct xfs_scrub *sc, struct xchk_rt *sr);
|
2024-11-20 16:20:39 -08:00
|
|
|
int xrep_require_rtext_inuse(struct xfs_scrub *sc, xfs_rgblock_t rgbno,
|
|
|
|
xfs_filblks_t len);
|
2024-11-20 16:20:42 -08:00
|
|
|
xfs_extlen_t xrep_calc_rtgroup_resblks(struct xfs_scrub *sc);
|
2024-11-03 20:19:06 -08:00
|
|
|
#else
|
|
|
|
# define xrep_rtgroup_init(sc, rtg, sr, lockflags) (-ENOSYS)
|
2024-11-20 16:20:42 -08:00
|
|
|
# define xrep_calc_rtgroup_resblks(sc) (0)
|
2024-11-03 20:19:06 -08:00
|
|
|
#endif /* CONFIG_XFS_RT */
|
2023-12-15 10:03:32 -08:00
|
|
|
|
2024-11-20 16:20:42 -08:00
|
|
|
int xrep_check_ino_btree_mapping(struct xfs_scrub *sc,
|
|
|
|
const struct xfs_rmap_irec *rec);
|
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
/* Metadata revalidators */
|
|
|
|
|
|
|
|
int xrep_revalidate_allocbt(struct xfs_scrub *sc);
|
2023-12-15 10:03:32 -08:00
|
|
|
int xrep_revalidate_iallocbt(struct xfs_scrub *sc);
|
2023-12-15 10:03:32 -08:00
|
|
|
|
2018-05-14 06:34:36 -07:00
|
|
|
/* Metadata repairers */
|
|
|
|
|
2018-07-19 12:29:12 -07:00
|
|
|
int xrep_probe(struct xfs_scrub *sc);
|
|
|
|
int xrep_superblock(struct xfs_scrub *sc);
|
2018-08-09 22:42:53 -07:00
|
|
|
int xrep_agf(struct xfs_scrub *sc);
|
2018-08-09 22:43:02 -07:00
|
|
|
int xrep_agfl(struct xfs_scrub *sc);
|
2018-08-09 22:43:04 -07:00
|
|
|
int xrep_agi(struct xfs_scrub *sc);
|
2023-12-15 10:03:32 -08:00
|
|
|
int xrep_allocbt(struct xfs_scrub *sc);
|
2023-12-15 10:03:32 -08:00
|
|
|
int xrep_iallocbt(struct xfs_scrub *sc);
|
2024-02-22 12:43:38 -08:00
|
|
|
int xrep_rmapbt(struct xfs_scrub *sc);
|
2023-12-15 10:03:33 -08:00
|
|
|
int xrep_refcountbt(struct xfs_scrub *sc);
|
2023-12-15 10:03:36 -08:00
|
|
|
int xrep_inode(struct xfs_scrub *sc);
|
2023-12-15 10:03:39 -08:00
|
|
|
int xrep_bmap_data(struct xfs_scrub *sc);
|
|
|
|
int xrep_bmap_attr(struct xfs_scrub *sc);
|
2023-12-15 10:03:40 -08:00
|
|
|
int xrep_bmap_cow(struct xfs_scrub *sc);
|
2024-02-22 12:31:00 -08:00
|
|
|
int xrep_nlinks(struct xfs_scrub *sc);
|
2024-02-22 12:33:05 -08:00
|
|
|
int xrep_fscounters(struct xfs_scrub *sc);
|
2024-04-15 14:54:45 -07:00
|
|
|
int xrep_xattr(struct xfs_scrub *sc);
|
2024-04-15 14:54:51 -07:00
|
|
|
int xrep_directory(struct xfs_scrub *sc);
|
2024-04-15 14:54:53 -07:00
|
|
|
int xrep_parent(struct xfs_scrub *sc);
|
2024-04-15 14:54:59 -07:00
|
|
|
int xrep_symlink(struct xfs_scrub *sc);
|
2024-04-22 09:48:22 -07:00
|
|
|
int xrep_dirtree(struct xfs_scrub *sc);
|
2024-11-03 20:19:03 -08:00
|
|
|
int xrep_metapath(struct xfs_scrub *sc);
|
2023-12-15 10:03:32 -08:00
|
|
|
|
2023-12-15 10:03:43 -08:00
|
|
|
#ifdef CONFIG_XFS_RT
|
|
|
|
int xrep_rtbitmap(struct xfs_scrub *sc);
|
2024-04-15 14:54:33 -07:00
|
|
|
int xrep_rtsummary(struct xfs_scrub *sc);
|
2024-11-03 20:19:30 -08:00
|
|
|
int xrep_rgsuperblock(struct xfs_scrub *sc);
|
2024-11-20 16:20:42 -08:00
|
|
|
int xrep_rtrmapbt(struct xfs_scrub *sc);
|
2024-11-20 16:21:14 -08:00
|
|
|
int xrep_rtrefcountbt(struct xfs_scrub *sc);
|
2023-12-15 10:03:43 -08:00
|
|
|
#else
|
|
|
|
# define xrep_rtbitmap xrep_notsupported
|
2024-04-15 14:54:33 -07:00
|
|
|
# define xrep_rtsummary xrep_notsupported
|
2024-11-03 20:19:30 -08:00
|
|
|
# define xrep_rgsuperblock xrep_notsupported
|
2024-11-20 16:20:42 -08:00
|
|
|
# define xrep_rtrmapbt xrep_notsupported
|
2024-11-20 16:21:14 -08:00
|
|
|
# define xrep_rtrefcountbt xrep_notsupported
|
2023-12-15 10:03:43 -08:00
|
|
|
#endif /* CONFIG_XFS_RT */
|
|
|
|
|
2023-12-15 10:03:45 -08:00
|
|
|
#ifdef CONFIG_XFS_QUOTA
|
|
|
|
int xrep_quota(struct xfs_scrub *sc);
|
2024-02-22 12:30:57 -08:00
|
|
|
int xrep_quotacheck(struct xfs_scrub *sc);
|
2023-12-15 10:03:45 -08:00
|
|
|
#else
|
|
|
|
# define xrep_quota xrep_notsupported
|
2024-02-22 12:30:57 -08:00
|
|
|
# define xrep_quotacheck xrep_notsupported
|
2023-12-15 10:03:45 -08:00
|
|
|
#endif /* CONFIG_XFS_QUOTA */
|
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
int xrep_reinit_pagf(struct xfs_scrub *sc);
|
2023-12-15 10:03:32 -08:00
|
|
|
int xrep_reinit_pagi(struct xfs_scrub *sc);
|
2018-05-14 06:34:36 -07:00
|
|
|
|
2024-04-15 14:54:45 -07:00
|
|
|
bool xrep_buf_verify_struct(struct xfs_buf *bp, const struct xfs_buf_ops *ops);
|
2024-11-20 16:20:42 -08:00
|
|
|
void xrep_inode_set_nblocks(struct xfs_scrub *sc, int64_t new_blocks);
|
|
|
|
int xrep_reset_metafile_resv(struct xfs_scrub *sc);
|
2024-04-15 14:54:45 -07:00
|
|
|
|
2018-05-14 06:34:36 -07:00
|
|
|
#else
|
|
|
|
|
2023-12-15 10:03:33 -08:00
|
|
|
#define xrep_ino_dqattach(sc) (0)
|
xfs: fix online repair probing when CONFIG_XFS_ONLINE_REPAIR=n
I received a report from the release engineering side of the house that
xfs_scrub without the -n flag (aka fix it mode) would try to fix a
broken filesystem even on a kernel that doesn't have online repair built
into it:
# xfs_scrub -dTvn /mnt/test
EXPERIMENTAL xfs_scrub program in use! Use at your own risk!
Phase 1: Find filesystem geometry.
/mnt/test: using 1 threads to scrub.
Phase 1: Memory used: 132k/0k (108k/25k), time: 0.00/ 0.00/ 0.00s
<snip>
Phase 4: Repair filesystem.
<snip>
Info: /mnt/test/some/victimdir directory entries: Attempting repair. (repair.c line 351)
Corruption: /mnt/test/some/victimdir directory entries: Repair unsuccessful; offline repair required. (repair.c line 204)
Source: https://blogs.oracle.com/linux/post/xfs-online-filesystem-repair
It is strange that xfs_scrub doesn't refuse to run, because the kernel
is supposed to return EOPNOTSUPP if we actually needed to run a repair,
and xfs_io's repair subcommand will perror that. And yet:
# xfs_io -x -c 'repair probe' /mnt/test
#
The first problem is commit dcb660f9222fd9 (4.15) which should have had
xchk_probe set the CORRUPT OFLAG so that any of the repair machinery
will get called at all.
It turns out that some refactoring that happened in the 6.6-6.8 era
broke the operation of this corner case. What we *really* want to
happen is that all the predicates that would steer xfs_scrub_metadata()
towards calling xrep_attempt() should function the same way that they do
when repair is compiled in; and then xrep_attempt gets to return the
fatal EOPNOTSUPP error code that causes the probe to fail.
Instead, commit 8336a64eb75cba (6.6) started the failwhale swimming by
hoisting OFLAG checking logic into a helper whose non-repair stub always
returns false, causing scrub to return "repair not needed" when in fact
the repair is not supported. Prior to that commit, the oflag checking
that was open-coded in scrub.c worked correctly.
Similarly, in commit 4bdfd7d15747b1 (6.8) we hoisted the IFLAG_REPAIR
and ALREADY_FIXED logic into a helper whose non-repair stub always
returns false, so we never enter the if test body that would have called
xrep_attempt, let alone fail to decode the OFLAGs correctly.
The final insult (yes, we're doing The Naked Gun now) is commit
48a72f60861f79 (6.8) in which we hoisted the "are we going to try a
repair?" predicate into yet another function with a non-repair stub
always returns false.
Fix xchk_probe to trigger xrep_probe if repair is enabled, or return
EOPNOTSUPP directly if it is not. For all the other scrub types, we
need to fix the header predicates so that the ->repair functions (which
are all xrep_notsupported) get called to return EOPNOTSUPP. Commit
48a72 is tagged here because the scrub code prior to LTS 6.12 are
incomplete and not worth patching.
Reported-by: David Flynn <david.flynn@oracle.com>
Cc: <stable@vger.kernel.org> # v6.8
Fixes: 8336a64eb75c ("xfs: don't complain about unfixed metadata when repairs were injected")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
2025-02-02 16:50:14 -08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* When online repair is not built into the kernel, we still want to attempt
|
|
|
|
* the repair so that the stub xrep_attempt below will return EOPNOTSUPP.
|
|
|
|
*/
|
|
|
|
static inline bool xrep_will_attempt(const struct xfs_scrub *sc)
|
|
|
|
{
|
|
|
|
return (sc->sm->sm_flags & XFS_SCRUB_IFLAG_FORCE_REBUILD) ||
|
|
|
|
xchk_needs_repair(sc->sm);
|
|
|
|
}
|
2023-12-15 10:03:33 -08:00
|
|
|
|
2021-04-07 17:59:39 -07:00
|
|
|
static inline int
|
|
|
|
xrep_attempt(
|
2023-08-10 07:48:07 -07:00
|
|
|
struct xfs_scrub *sc,
|
|
|
|
struct xchk_stats_run *run)
|
2018-05-14 06:34:36 -07:00
|
|
|
{
|
|
|
|
return -EOPNOTSUPP;
|
|
|
|
}
|
|
|
|
|
2018-07-19 12:29:11 -07:00
|
|
|
static inline void xrep_failure(struct xfs_mount *mp) {}
|
2018-05-14 06:34:36 -07:00
|
|
|
|
2018-05-29 22:18:08 -07:00
|
|
|
static inline xfs_extlen_t
|
2018-07-19 12:29:11 -07:00
|
|
|
xrep_calc_ag_resblks(
|
2018-07-19 12:29:12 -07:00
|
|
|
struct xfs_scrub *sc)
|
2018-05-29 22:18:08 -07:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2024-11-20 16:20:42 -08:00
|
|
|
#define xrep_calc_rtgroup_resblks xrep_calc_ag_resblks
|
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
static inline int
|
|
|
|
xrep_reset_perag_resv(
|
|
|
|
struct xfs_scrub *sc)
|
|
|
|
{
|
|
|
|
if (!(sc->flags & XREP_RESET_PERAG_RESV))
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
ASSERT(0);
|
|
|
|
return -EOPNOTSUPP;
|
|
|
|
}
|
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
/* repair setup functions for no-repair */
|
|
|
|
static inline int
|
|
|
|
xrep_setup_nothing(
|
|
|
|
struct xfs_scrub *sc)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
#define xrep_setup_ag_allocbt xrep_setup_nothing
|
2024-02-22 12:43:38 -08:00
|
|
|
#define xrep_setup_ag_rmapbt xrep_setup_nothing
|
2024-02-22 12:43:42 -08:00
|
|
|
#define xrep_setup_ag_refcountbt xrep_setup_nothing
|
2024-04-15 14:54:45 -07:00
|
|
|
#define xrep_setup_xattr xrep_setup_nothing
|
2024-04-15 14:54:51 -07:00
|
|
|
#define xrep_setup_directory xrep_setup_nothing
|
2024-04-15 14:54:53 -07:00
|
|
|
#define xrep_setup_parent xrep_setup_nothing
|
2024-04-15 14:54:56 -07:00
|
|
|
#define xrep_setup_nlinks xrep_setup_nothing
|
2024-04-22 09:48:22 -07:00
|
|
|
#define xrep_setup_dirtree xrep_setup_nothing
|
2024-11-03 20:19:03 -08:00
|
|
|
#define xrep_setup_metapath xrep_setup_nothing
|
2024-11-20 16:20:42 -08:00
|
|
|
#define xrep_setup_rtrmapbt xrep_setup_nothing
|
2024-11-20 16:21:14 -08:00
|
|
|
#define xrep_setup_rtrefcountbt xrep_setup_nothing
|
2023-12-15 10:03:32 -08:00
|
|
|
|
2023-12-15 10:03:36 -08:00
|
|
|
#define xrep_setup_inode(sc, imap) ((void)0)
|
|
|
|
|
2024-04-15 14:54:59 -07:00
|
|
|
static inline int xrep_setup_symlink(struct xfs_scrub *sc, unsigned int *x)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2023-12-15 10:03:32 -08:00
|
|
|
#define xrep_revalidate_allocbt (NULL)
|
2023-12-15 10:03:32 -08:00
|
|
|
#define xrep_revalidate_iallocbt (NULL)
|
2023-12-15 10:03:32 -08:00
|
|
|
|
2018-07-19 12:29:11 -07:00
|
|
|
#define xrep_probe xrep_notsupported
|
|
|
|
#define xrep_superblock xrep_notsupported
|
2018-08-09 22:42:53 -07:00
|
|
|
#define xrep_agf xrep_notsupported
|
2018-08-09 22:43:02 -07:00
|
|
|
#define xrep_agfl xrep_notsupported
|
2018-08-09 22:43:04 -07:00
|
|
|
#define xrep_agi xrep_notsupported
|
2023-12-15 10:03:32 -08:00
|
|
|
#define xrep_allocbt xrep_notsupported
|
2023-12-15 10:03:32 -08:00
|
|
|
#define xrep_iallocbt xrep_notsupported
|
2024-02-22 12:43:38 -08:00
|
|
|
#define xrep_rmapbt xrep_notsupported
|
2023-12-15 10:03:33 -08:00
|
|
|
#define xrep_refcountbt xrep_notsupported
|
2023-12-15 10:03:36 -08:00
|
|
|
#define xrep_inode xrep_notsupported
|
2023-12-15 10:03:39 -08:00
|
|
|
#define xrep_bmap_data xrep_notsupported
|
|
|
|
#define xrep_bmap_attr xrep_notsupported
|
2023-12-15 10:03:40 -08:00
|
|
|
#define xrep_bmap_cow xrep_notsupported
|
2023-12-15 10:03:43 -08:00
|
|
|
#define xrep_rtbitmap xrep_notsupported
|
2023-12-15 10:03:45 -08:00
|
|
|
#define xrep_quota xrep_notsupported
|
2024-02-22 12:30:57 -08:00
|
|
|
#define xrep_quotacheck xrep_notsupported
|
2024-02-22 12:31:00 -08:00
|
|
|
#define xrep_nlinks xrep_notsupported
|
2024-02-22 12:33:05 -08:00
|
|
|
#define xrep_fscounters xrep_notsupported
|
2024-04-15 14:54:33 -07:00
|
|
|
#define xrep_rtsummary xrep_notsupported
|
2024-04-15 14:54:45 -07:00
|
|
|
#define xrep_xattr xrep_notsupported
|
2024-04-15 14:54:51 -07:00
|
|
|
#define xrep_directory xrep_notsupported
|
2024-04-15 14:54:53 -07:00
|
|
|
#define xrep_parent xrep_notsupported
|
2024-04-15 14:54:59 -07:00
|
|
|
#define xrep_symlink xrep_notsupported
|
2024-04-22 09:48:22 -07:00
|
|
|
#define xrep_dirtree xrep_notsupported
|
2024-11-03 20:19:03 -08:00
|
|
|
#define xrep_metapath xrep_notsupported
|
2024-11-03 20:19:30 -08:00
|
|
|
#define xrep_rgsuperblock xrep_notsupported
|
2024-11-20 16:20:42 -08:00
|
|
|
#define xrep_rtrmapbt xrep_notsupported
|
2024-11-20 16:21:14 -08:00
|
|
|
#define xrep_rtrefcountbt xrep_notsupported
|
2018-05-14 06:34:36 -07:00
|
|
|
|
|
|
|
#endif /* CONFIG_XFS_ONLINE_REPAIR */
|
|
|
|
|
|
|
|
#endif /* __XFS_SCRUB_REPAIR_H__ */
|