]>
git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blob - scrub/common.h
1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2018 Oracle. All Rights Reserved.
4 * Author: Darrick J. Wong <darrick.wong@oracle.com>
6 #ifndef XFS_SCRUB_COMMON_H_
7 #define XFS_SCRUB_COMMON_H_
10 * When reporting a defective metadata object to the console, this
11 * is the size of the buffer to use to store the description of that
14 #define DESCR_BUFSZ 256
16 bool xfs_scrub_excessive_errors(struct scrub_ctx
*ctx
);
28 void __str_out(struct scrub_ctx
*ctx
, const char *descr
, enum error_level level
,
29 int error
, const char *file
, int line
, const char *format
, ...);
31 #define str_errno(ctx, str) \
32 __str_out(ctx, str, S_ERROR, errno, __FILE__, __LINE__, NULL)
33 #define str_liberror(ctx, error, str) \
34 __str_out(ctx, str, S_ERROR, error, __FILE__, __LINE__, NULL)
35 #define str_corrupt(ctx, str, ...) \
36 __str_out(ctx, str, S_CORRUPT, 0, __FILE__, __LINE__, __VA_ARGS__)
37 #define str_error(ctx, str, ...) \
38 __str_out(ctx, str, S_ERROR, 0, __FILE__, __LINE__, __VA_ARGS__)
39 #define str_warn(ctx, str, ...) \
40 __str_out(ctx, str, S_WARN, 0, __FILE__, __LINE__, __VA_ARGS__)
41 #define str_info(ctx, str, ...) \
42 __str_out(ctx, str, S_INFO, 0, __FILE__, __LINE__, __VA_ARGS__)
43 #define record_repair(ctx, str, ...) \
44 __str_out(ctx, str, S_REPAIR, 0, __FILE__, __LINE__, __VA_ARGS__)
45 #define record_preen(ctx, str, ...) \
46 __str_out(ctx, str, S_PREEN, 0, __FILE__, __LINE__, __VA_ARGS__)
47 #define str_unfixable_error(ctx, str, ...) \
48 __str_out(ctx, str, S_UNFIXABLE, 0, __FILE__, __LINE__, __VA_ARGS__)
50 #define dbg_printf(fmt, ...) \
51 do {if (debug > 1) {printf(fmt, __VA_ARGS__);}} while (0)
53 void __str_log(struct scrub_ctx
*ctx
, enum error_level level
,
54 const char *format
, ...);
56 #define log_info(ctx, ...) \
57 __str_log(ctx, S_INFO, __VA_ARGS__)
58 #define log_warn(ctx, ...) \
59 __str_log(ctx, S_WARN, __VA_ARGS__)
60 #define log_err(ctx, ...) \
61 __str_log(ctx, S_ERROR, __VA_ARGS__)
63 /* Is this debug tweak enabled? */
68 return debug
&& getenv(name
) != NULL
;
71 double timeval_subtract(struct timeval
*tv1
, struct timeval
*tv2
);
72 double auto_space_units(unsigned long long kilobytes
, char **units
);
73 double auto_units(unsigned long long number
, char **units
, int *precision
);
74 unsigned int scrub_nproc(struct scrub_ctx
*ctx
);
75 unsigned int scrub_nproc_workqueue(struct scrub_ctx
*ctx
);
78 static inline int syncfs(int fd
)
85 void background_sleep(void);
86 char *string_escape(const char *in
);
88 #define TOO_MANY_NAME_WARNINGS 10000
89 bool should_warn_about_name(struct scrub_ctx
*ctx
);
91 bool within_range(struct scrub_ctx
*ctx
, unsigned long long value
,
92 unsigned long long desired
, unsigned long long abs_threshold
,
93 unsigned int n
, unsigned int d
, const char *descr
);
95 int scrub_render_ino_descr(const struct scrub_ctx
*ctx
, char *buf
,
96 size_t buflen
, uint64_t ino
, uint32_t gen
,
97 const char *format
, ...);
99 #endif /* XFS_SCRUB_COMMON_H_ */