]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - scrub/xfs_scrub.h
xfs_scrub: remove moveon from main program
[thirdparty/xfsprogs-dev.git] / scrub / xfs_scrub.h
CommitLineData
959ef981 1// SPDX-License-Identifier: GPL-2.0+
95b1e505
DW
2/*
3 * Copyright (C) 2018 Oracle. All Rights Reserved.
95b1e505 4 * Author: Darrick J. Wong <darrick.wong@oracle.com>
95b1e505
DW
5 */
6#ifndef XFS_SCRUB_XFS_SCRUB_H_
7#define XFS_SCRUB_XFS_SCRUB_H_
8
fee68490 9#include "libfrog/fsgeom.h"
3f9efb2e 10
28e36fcc
ES
11extern char *progname;
12
828105d1
DW
13#define _PATH_PROC_MOUNTS "/proc/mounts"
14
32c6cc09 15extern unsigned int force_nr_threads;
828105d1 16extern unsigned int bg_mode;
f0585fce 17extern unsigned int debug;
828105d1
DW
18extern bool verbose;
19extern long page_size;
7e36bc0f 20extern bool want_fstrim;
ed60d210
DW
21extern bool stderr_isatty;
22extern bool stdout_isatty;
7c309151 23extern bool is_service;
828105d1
DW
24
25enum scrub_mode {
26 SCRUB_MODE_DRY_RUN,
828105d1
DW
27 SCRUB_MODE_REPAIR,
28};
828105d1
DW
29
30enum error_action {
31 ERRORS_CONTINUE,
32 ERRORS_SHUTDOWN,
33};
f0585fce
DW
34
35struct scrub_ctx {
828105d1
DW
36 /* Immutable scrub state. */
37
38 /* Strings we need for presentation */
39 char *mntpoint;
828105d1 40
50a573a7
DW
41 /* Mountpoint info */
42 struct stat mnt_sb;
43 struct statvfs mnt_sv;
44 struct statfs mnt_sf;
45
46 /* Open block devices */
47 struct disk *datadev;
48 struct disk *logdev;
49 struct disk *rtdev;
50
828105d1
DW
51 /* What does the user want us to do? */
52 enum scrub_mode mode;
53
54 /* How does the user want us to react to errors? */
55 enum error_action error_action;
56
3f9efb2e
DW
57 /* xfrog context for the mount point */
58 struct xfs_fd mnt;
50a573a7 59
e031d90f
DW
60 /* Number of threads for metadata scrubbing */
61 unsigned int nr_io_threads;
62
50a573a7 63 /* XFS specific geometry */
50a573a7 64 struct fs_path fsinfo;
50a573a7
DW
65 void *fshandle;
66 size_t fshandle_len;
67
2000470d
DW
68 /* Data block read verification buffer */
69 void *readbuf;
70
f0585fce
DW
71 /* Mutable scrub state; use lock. */
72 pthread_mutex_t lock;
83d2c80b 73 struct action_list *action_lists;
f0585fce
DW
74 unsigned long long max_errors;
75 unsigned long long runtime_errors;
abc2e70d 76 unsigned long long corruptions_found;
49e05cb0 77 unsigned long long unfixable_errors;
f0585fce 78 unsigned long long warnings_found;
fa16b376 79 unsigned long long inodes_checked;
b364a9c0 80 unsigned long long bytes_checked;
396cd022 81 unsigned long long naming_warnings;
19852474
DW
82 unsigned long long repairs;
83 unsigned long long preens;
c767c5ae 84 bool scrub_setup_succeeded;
50a573a7 85 bool preen_triggers[XFS_SCRUB_TYPE_NR];
f0585fce
DW
86};
87
50a573a7
DW
88/* Phase helper functions */
89void xfs_shutdown_fs(struct scrub_ctx *ctx);
35b65bcf 90int scrub_cleanup(struct scrub_ctx *ctx);
64dabc9f
DW
91int phase1_func(struct scrub_ctx *ctx);
92int phase2_func(struct scrub_ctx *ctx);
93int phase3_func(struct scrub_ctx *ctx);
94int phase4_func(struct scrub_ctx *ctx);
95int phase5_func(struct scrub_ctx *ctx);
96int phase6_func(struct scrub_ctx *ctx);
97int phase7_func(struct scrub_ctx *ctx);
50a573a7 98
ed60d210 99/* Progress estimator functions */
d22f2471 100unsigned int scrub_estimate_ag_work(struct scrub_ctx *ctx);
64dabc9f
DW
101int phase2_estimate(struct scrub_ctx *ctx, uint64_t *items,
102 unsigned int *nr_threads, int *rshift);
103int phase3_estimate(struct scrub_ctx *ctx, uint64_t *items,
104 unsigned int *nr_threads, int *rshift);
105int phase4_estimate(struct scrub_ctx *ctx, uint64_t *items,
106 unsigned int *nr_threads, int *rshift);
107int phase5_estimate(struct scrub_ctx *ctx, uint64_t *items,
108 unsigned int *nr_threads, int *rshift);
109int phase6_estimate(struct scrub_ctx *ctx, uint64_t *items,
110 unsigned int *nr_threads, int *rshift);
ed60d210 111
95b1e505 112#endif /* XFS_SCRUB_XFS_SCRUB_H_ */