/* Too many errors? Bail out. */
bool
-xfs_scrub_excessive_errors(
+scrub_excessive_errors(
struct scrub_ctx *ctx)
{
unsigned long long errors_seen;
*/
#define DESCR_BUFSZ 256
-bool xfs_scrub_excessive_errors(struct scrub_ctx *ctx);
+bool scrub_excessive_errors(struct scrub_ctx *ctx);
enum error_level {
S_ERROR = 0,
ret = fn(ctx, fd, whichfork, &fsx, &bmap, arg);
if (ret)
goto out;
- if (xfs_scrub_excessive_errors(ctx))
+ if (scrub_excessive_errors(ctx))
goto out;
}
default:
goto err;
}
- if (xfs_scrub_excessive_errors(ctx)) {
+ if (scrub_excessive_errors(ctx)) {
si->aborted = true;
goto out;
}
}
/* Do we have kernel-assisted metadata scrubbing? */
- if (!xfs_can_scrub_fs_metadata(ctx) || !xfs_can_scrub_inode(ctx) ||
- !xfs_can_scrub_bmap(ctx) || !xfs_can_scrub_dir(ctx) ||
- !xfs_can_scrub_attr(ctx) || !xfs_can_scrub_symlink(ctx) ||
- !xfs_can_scrub_parent(ctx)) {
+ if (!can_scrub_fs_metadata(ctx) || !can_scrub_inode(ctx) ||
+ !can_scrub_bmap(ctx) || !can_scrub_dir(ctx) ||
+ !can_scrub_attr(ctx) || !can_scrub_symlink(ctx) ||
+ !can_scrub_parent(ctx)) {
str_error(ctx, ctx->mntpoint,
_("Kernel metadata scrubbing facility is not available."));
return ECANCELED;
* First we scrub and fix the AG headers, because we need
* them to work well enough to check the AG btrees.
*/
- ret = xfs_scrub_ag_headers(ctx, agno, &alist);
+ ret = scrub_ag_headers(ctx, agno, &alist);
if (ret)
goto err;
goto err;
/* Now scrub the AG btrees. */
- ret = xfs_scrub_ag_metadata(ctx, agno, &alist);
+ ret = scrub_ag_metadata(ctx, agno, &alist);
if (ret)
goto err;
return;
action_list_init(&alist);
- ret = xfs_scrub_fs_metadata(ctx, &alist);
+ ret = scrub_fs_metadata(ctx, &alist);
if (ret) {
*aborted = true;
return;
* anything else.
*/
action_list_init(&alist);
- ret = xfs_scrub_primary_super(ctx, &alist);
+ ret = scrub_primary_super(ctx, &alist);
if (ret)
goto out;
ret = action_list_process_or_defer(ctx, 0, &alist);
}
/* Scrub the inode. */
- error = scrub_fd(ctx, xfs_scrub_inode_fields, bstat, &alist);
+ error = scrub_fd(ctx, scrub_inode_fields, bstat, &alist);
if (error)
goto out;
goto out;
/* Scrub all block mappings. */
- error = scrub_fd(ctx, xfs_scrub_data_fork, bstat, &alist);
+ error = scrub_fd(ctx, scrub_data_fork, bstat, &alist);
if (error)
goto out;
- error = scrub_fd(ctx, xfs_scrub_attr_fork, bstat, &alist);
+ error = scrub_fd(ctx, scrub_attr_fork, bstat, &alist);
if (error)
goto out;
- error = scrub_fd(ctx, xfs_scrub_cow_fork, bstat, &alist);
+ error = scrub_fd(ctx, scrub_cow_fork, bstat, &alist);
if (error)
goto out;
if (S_ISLNK(bstat->bs_mode)) {
/* Check symlink contents. */
- error = xfs_scrub_symlink(ctx, bstat->bs_ino, bstat->bs_gen,
+ error = scrub_symlink(ctx, bstat->bs_ino, bstat->bs_gen,
&alist);
} else if (S_ISDIR(bstat->bs_mode)) {
/* Check the directory entries. */
- error = scrub_fd(ctx, xfs_scrub_dir, bstat, &alist);
+ error = scrub_fd(ctx, scrub_dir, bstat, &alist);
}
if (error)
goto out;
/* Check all the extended attributes. */
- error = scrub_fd(ctx, xfs_scrub_attr, bstat, &alist);
+ error = scrub_fd(ctx, scrub_attr, bstat, &alist);
if (error)
goto out;
/* Check parent pointers. */
- error = scrub_fd(ctx, xfs_scrub_parent, bstat, &alist);
+ error = scrub_fd(ctx, scrub_parent, bstat, &alist);
if (error)
goto out;
if (err)
goto free;
- xfs_scrub_report_preen_triggers(ctx);
+ scrub_report_preen_triggers(ctx);
err = ptcounter_value(ictx.icount, &val);
if (err) {
str_liberror(ctx, err, _("summing scanned inode counter"));
* counters, so counter repairs have to be put on the list now so that
* they get fixed before we stop retrying unfixed metadata repairs.
*/
- ret = xfs_scrub_fs_summary(ctx, &ctx->action_lists[0]);
+ ret = scrub_fs_summary(ctx, &ctx->action_lists[0]);
if (ret)
return ret;
if (aborted)
return ECANCELED;
- xfs_scrub_report_preen_triggers(ctx);
+ scrub_report_preen_triggers(ctx);
return 0;
}
/* Check and fix the fs summary counters. */
action_list_init(&alist);
- error = xfs_scrub_fs_summary(ctx, &alist);
+ error = scrub_fs_summary(ctx, &alist);
if (error)
return error;
error = action_list_process(ctx, ctx->mnt.fd, &alist,
}
}
- if (xfs_scrub_excessive_errors(ctx))
+ if (scrub_excessive_errors(ctx))
return ECANCELED;
return 0;
}
/* Warn about strange circumstances after scrub. */
static inline void
-xfs_scrub_warn_incomplete_scrub(
+scrub_warn_incomplete_scrub(
struct scrub_ctx *ctx,
struct descr *dsc,
struct xfs_scrub_metadata *meta)
}
/* Complain about incomplete or suspicious metadata. */
- xfs_scrub_warn_incomplete_scrub(ctx, &dsc, meta);
+ scrub_warn_incomplete_scrub(ctx, &dsc, meta);
/*
* If we need repairs or there were discrepancies, schedule a
/* Bulk-notify user about things that could be optimized. */
void
-xfs_scrub_report_preen_triggers(
+scrub_report_preen_triggers(
struct scrub_ctx *ctx)
{
int i;
/* Save a scrub context for later repairs. */
static int
-xfs_scrub_save_repair(
+scrub_save_repair(
struct scrub_ctx *ctx,
struct action_list *alist,
struct xfs_scrub_metadata *meta)
* return a positive error code.
*/
static int
-xfs_scrub_meta_type(
+scrub_meta_type(
struct scrub_ctx *ctx,
unsigned int type,
xfs_agnumber_t agno,
case CHECK_ABORT:
return ECANCELED;
case CHECK_REPAIR:
- ret = xfs_scrub_save_repair(ctx, alist, &meta);
+ ret = scrub_save_repair(ctx, alist, &meta);
if (ret)
return ret;
/* fall through */
* XFROG_SCRUB_TYPE_INODE or for checking summary metadata.
*/
static bool
-xfs_scrub_all_types(
+scrub_all_types(
struct scrub_ctx *ctx,
enum xfrog_scrub_type scrub_type,
xfs_agnumber_t agno,
if (sc->flags & XFROG_SCRUB_DESCR_SUMMARY)
continue;
- ret = xfs_scrub_meta_type(ctx, type, agno, alist);
+ ret = scrub_meta_type(ctx, type, agno, alist);
if (ret)
return ret;
}
* return nonzero.
*/
int
-xfs_scrub_primary_super(
+scrub_primary_super(
struct scrub_ctx *ctx,
struct action_list *alist)
{
- return xfs_scrub_meta_type(ctx, XFS_SCRUB_TYPE_SB, 0, alist);
+ return scrub_meta_type(ctx, XFS_SCRUB_TYPE_SB, 0, alist);
}
/* Scrub each AG's header blocks. */
int
-xfs_scrub_ag_headers(
+scrub_ag_headers(
struct scrub_ctx *ctx,
xfs_agnumber_t agno,
struct action_list *alist)
{
- return xfs_scrub_all_types(ctx, XFROG_SCRUB_TYPE_AGHEADER, agno, alist);
+ return scrub_all_types(ctx, XFROG_SCRUB_TYPE_AGHEADER, agno, alist);
}
/* Scrub each AG's metadata btrees. */
int
-xfs_scrub_ag_metadata(
+scrub_ag_metadata(
struct scrub_ctx *ctx,
xfs_agnumber_t agno,
struct action_list *alist)
{
- return xfs_scrub_all_types(ctx, XFROG_SCRUB_TYPE_PERAG, agno, alist);
+ return scrub_all_types(ctx, XFROG_SCRUB_TYPE_PERAG, agno, alist);
}
/* Scrub whole-FS metadata btrees. */
int
-xfs_scrub_fs_metadata(
+scrub_fs_metadata(
struct scrub_ctx *ctx,
struct action_list *alist)
{
- return xfs_scrub_all_types(ctx, XFROG_SCRUB_TYPE_FS, 0, alist);
+ return scrub_all_types(ctx, XFROG_SCRUB_TYPE_FS, 0, alist);
}
/* Scrub FS summary metadata. */
int
-xfs_scrub_fs_summary(
+scrub_fs_summary(
struct scrub_ctx *ctx,
struct action_list *alist)
{
- return xfs_scrub_meta_type(ctx, XFS_SCRUB_TYPE_FSCOUNTERS, 0, alist);
+ return scrub_meta_type(ctx, XFS_SCRUB_TYPE_FSCOUNTERS, 0, alist);
}
/* How many items do we have to check? */
* return nonzero.
*/
static int
-__xfs_scrub_file(
+__scrub_file(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
if (fix == CHECK_DONE)
return 0;
- return xfs_scrub_save_repair(ctx, alist, &meta);
+ return scrub_save_repair(ctx, alist, &meta);
}
int
-xfs_scrub_inode_fields(
+scrub_inode_fields(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_INODE, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_INODE, alist);
}
int
-xfs_scrub_data_fork(
+scrub_data_fork(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_BMBTD, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_BMBTD, alist);
}
int
-xfs_scrub_attr_fork(
+scrub_attr_fork(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_BMBTA, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_BMBTA, alist);
}
int
-xfs_scrub_cow_fork(
+scrub_cow_fork(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_BMBTC, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_BMBTC, alist);
}
int
-xfs_scrub_dir(
+scrub_dir(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_DIR, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_DIR, alist);
}
int
-xfs_scrub_attr(
+scrub_attr(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_XATTR, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_XATTR, alist);
}
int
-xfs_scrub_symlink(
+scrub_symlink(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_SYMLINK, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_SYMLINK, alist);
}
int
-xfs_scrub_parent(
+scrub_parent(
struct scrub_ctx *ctx,
uint64_t ino,
uint32_t gen,
struct action_list *alist)
{
- return __xfs_scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_PARENT, alist);
+ return __scrub_file(ctx, ino, gen, XFS_SCRUB_TYPE_PARENT, alist);
}
/*
* return false.
*/
static bool
-__xfs_scrub_test(
+__scrub_test(
struct scrub_ctx *ctx,
unsigned int type,
bool repair)
}
bool
-xfs_can_scrub_fs_metadata(
+can_scrub_fs_metadata(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_PROBE, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_PROBE, false);
}
bool
-xfs_can_scrub_inode(
+can_scrub_inode(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_INODE, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_INODE, false);
}
bool
-xfs_can_scrub_bmap(
+can_scrub_bmap(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_BMBTD, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_BMBTD, false);
}
bool
-xfs_can_scrub_dir(
+can_scrub_dir(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_DIR, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_DIR, false);
}
bool
-xfs_can_scrub_attr(
+can_scrub_attr(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_XATTR, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_XATTR, false);
}
bool
-xfs_can_scrub_symlink(
+can_scrub_symlink(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_SYMLINK, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_SYMLINK, false);
}
bool
-xfs_can_scrub_parent(
+can_scrub_parent(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_PARENT, false);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_PARENT, false);
}
bool
xfs_can_repair(
struct scrub_ctx *ctx)
{
- return __xfs_scrub_test(ctx, XFS_SCRUB_TYPE_PROBE, true);
+ return __scrub_test(ctx, XFS_SCRUB_TYPE_PROBE, true);
}
/* General repair routines. */
}
if (repair_flags & XRM_COMPLAIN_IF_UNFIXED)
- xfs_scrub_warn_incomplete_scrub(ctx, &dsc, &meta);
+ scrub_warn_incomplete_scrub(ctx, &dsc, &meta);
if (needs_repair(&meta)) {
/*
* Still broken; if we've been told not to complain then we
struct action_item;
-void xfs_scrub_report_preen_triggers(struct scrub_ctx *ctx);
-int xfs_scrub_primary_super(struct scrub_ctx *ctx, struct action_list *alist);
-int xfs_scrub_ag_headers(struct scrub_ctx *ctx, xfs_agnumber_t agno,
+void scrub_report_preen_triggers(struct scrub_ctx *ctx);
+int scrub_primary_super(struct scrub_ctx *ctx, struct action_list *alist);
+int scrub_ag_headers(struct scrub_ctx *ctx, xfs_agnumber_t agno,
struct action_list *alist);
-int xfs_scrub_ag_metadata(struct scrub_ctx *ctx, xfs_agnumber_t agno,
+int scrub_ag_metadata(struct scrub_ctx *ctx, xfs_agnumber_t agno,
struct action_list *alist);
-int xfs_scrub_fs_metadata(struct scrub_ctx *ctx, struct action_list *alist);
-int xfs_scrub_fs_summary(struct scrub_ctx *ctx, struct action_list *alist);
+int scrub_fs_metadata(struct scrub_ctx *ctx, struct action_list *alist);
+int scrub_fs_summary(struct scrub_ctx *ctx, struct action_list *alist);
-bool xfs_can_scrub_fs_metadata(struct scrub_ctx *ctx);
-bool xfs_can_scrub_inode(struct scrub_ctx *ctx);
-bool xfs_can_scrub_bmap(struct scrub_ctx *ctx);
-bool xfs_can_scrub_dir(struct scrub_ctx *ctx);
-bool xfs_can_scrub_attr(struct scrub_ctx *ctx);
-bool xfs_can_scrub_symlink(struct scrub_ctx *ctx);
-bool xfs_can_scrub_parent(struct scrub_ctx *ctx);
+bool can_scrub_fs_metadata(struct scrub_ctx *ctx);
+bool can_scrub_inode(struct scrub_ctx *ctx);
+bool can_scrub_bmap(struct scrub_ctx *ctx);
+bool can_scrub_dir(struct scrub_ctx *ctx);
+bool can_scrub_attr(struct scrub_ctx *ctx);
+bool can_scrub_symlink(struct scrub_ctx *ctx);
+bool can_scrub_parent(struct scrub_ctx *ctx);
bool xfs_can_repair(struct scrub_ctx *ctx);
-int xfs_scrub_inode_fields(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_inode_fields(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_data_fork(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_data_fork(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_attr_fork(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_attr_fork(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_cow_fork(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_cow_fork(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_dir(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_dir(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_attr(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_attr(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_symlink(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_symlink(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
-int xfs_scrub_parent(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
+int scrub_parent(struct scrub_ctx *ctx, uint64_t ino, uint32_t gen,
struct action_list *alist);
/* Repair parameters are the scrub inputs and retry count. */
error = fn(ctx, p, arg);
if (error)
goto out;
- if (xfs_scrub_excessive_errors(ctx))
+ if (scrub_excessive_errors(ctx))
goto out;
}
break;
}
- if (xfs_scrub_excessive_errors(ctx)) {
+ if (scrub_excessive_errors(ctx)) {
sft->aborted = true;
break;
}
break;
/* Too many errors? */
- if (xfs_scrub_excessive_errors(ctx)) {
+ if (scrub_excessive_errors(ctx)) {
ret = ECANCELED;
break;
}
* We don't want every thread yelling that into the output, so check
* if we hit the threshold and tell the user *once*.
*/
- if (xfs_scrub_excessive_errors(&ctx))
+ if (scrub_excessive_errors(&ctx))
str_info(&ctx, ctx.mntpoint, _("Too many errors; aborting."));
if (debug_tweak_on("XFS_SCRUB_FORCE_ERROR"))