1 // SPDX-License-Identifier: GPL-2.0
10 #define STATE_STRING_PREFACE " state "
11 #define STATE_STRING_BUF_LEN (sizeof(STATE_STRING_PREFACE) + BTRFS_FS_STATE_COUNT + 1)
14 * Characters to print to indicate error conditions or uncommon filesystem state.
17 static const char fs_state_chars
[] = {
18 [BTRFS_FS_STATE_REMOUNTING
] = 'M',
19 [BTRFS_FS_STATE_RO
] = 0,
20 [BTRFS_FS_STATE_TRANS_ABORTED
] = 'A',
21 [BTRFS_FS_STATE_DEV_REPLACING
] = 'R',
22 [BTRFS_FS_STATE_DUMMY_FS_INFO
] = 0,
23 [BTRFS_FS_STATE_NO_DATA_CSUMS
] = 'C',
24 [BTRFS_FS_STATE_SKIP_META_CSUMS
] = 'S',
25 [BTRFS_FS_STATE_LOG_CLEANUP_ERROR
] = 'L',
28 static void btrfs_state_to_string(const struct btrfs_fs_info
*info
, char *buf
)
31 bool states_printed
= false;
32 unsigned long fs_state
= READ_ONCE(info
->fs_state
);
35 memcpy(curr
, STATE_STRING_PREFACE
, sizeof(STATE_STRING_PREFACE
));
36 curr
+= sizeof(STATE_STRING_PREFACE
) - 1;
38 if (BTRFS_FS_ERROR(info
)) {
40 states_printed
= true;
43 for_each_set_bit(bit
, &fs_state
, sizeof(fs_state
)) {
44 WARN_ON_ONCE(bit
>= BTRFS_FS_STATE_COUNT
);
45 if ((bit
< BTRFS_FS_STATE_COUNT
) && fs_state_chars
[bit
]) {
46 *curr
++ = fs_state_chars
[bit
];
47 states_printed
= true;
51 /* If no states were printed, reset the buffer */
60 * Generally the error codes correspond to their respective errors, but there
61 * are a few special cases.
63 * EUCLEAN: Any sort of corruption that we encounter. The tree-checker for
64 * instance will return EUCLEAN if any of the blocks are corrupted in
65 * a way that is problematic. We want to reserve EUCLEAN for these
66 * sort of corruptions.
68 * EROFS: If we check BTRFS_FS_STATE_ERROR and fail out with a return error, we
69 * need to use EROFS for this case. We will have no idea of the
70 * original failure, that will have been reported at the time we tripped
71 * over the error. Each subsequent error that doesn't have any context
72 * of the original error should use EROFS when handling BTRFS_FS_STATE_ERROR.
74 const char * __attribute_const__
btrfs_decode_error(int error
)
76 char *errstr
= "unknown";
79 case -ENOENT
: /* -2 */
80 errstr
= "No such entry";
83 errstr
= "IO failure";
85 case -ENOMEM
: /* -12*/
86 errstr
= "Out of memory";
88 case -EEXIST
: /* -17 */
89 errstr
= "Object already exists";
91 case -ENOSPC
: /* -28 */
92 errstr
= "No space left";
94 case -EROFS
: /* -30 */
95 errstr
= "Readonly filesystem";
97 case -EOPNOTSUPP
: /* -95 */
98 errstr
= "Operation not supported";
100 case -EUCLEAN
: /* -117 */
101 errstr
= "Filesystem corrupted";
103 case -EDQUOT
: /* -122 */
104 errstr
= "Quota exceeded";
112 * Decodes expected errors from the caller and invokes the appropriate error
116 void __btrfs_handle_fs_error(struct btrfs_fs_info
*fs_info
, const char *function
,
117 unsigned int line
, int error
, const char *fmt
, ...)
119 struct super_block
*sb
= fs_info
->sb
;
121 char statestr
[STATE_STRING_BUF_LEN
];
125 #ifdef CONFIG_PRINTK_INDEX
126 printk_index_subsys_emit(
127 "BTRFS: error (device %s%s) in %s:%d: errno=%d %s", KERN_CRIT
, fmt
);
131 * Special case: if the error is EROFS, and we're already under
132 * SB_RDONLY, then it is safe here.
134 if (error
== -EROFS
&& sb_rdonly(sb
))
138 errstr
= btrfs_decode_error(error
);
139 btrfs_state_to_string(fs_info
, statestr
);
141 struct va_format vaf
;
148 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s (%pV)\n",
149 sb
->s_id
, statestr
, function
, line
, error
, errstr
, &vaf
);
152 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s\n",
153 sb
->s_id
, statestr
, function
, line
, error
, errstr
);
158 * Today we only save the error info to memory. Long term we'll also
159 * send it down to the disk.
161 WRITE_ONCE(fs_info
->fs_error
, error
);
163 /* Don't go through full error handling during mount. */
164 if (!(sb
->s_flags
& SB_BORN
))
170 btrfs_discard_stop(fs_info
);
172 /* Handle error by forcing the filesystem readonly. */
173 btrfs_set_sb_rdonly(sb
);
174 btrfs_info(fs_info
, "forced readonly");
176 * Note that a running device replace operation is not canceled here
177 * although there is no way to update the progress. It would add the
178 * risk of a deadlock, therefore the canceling is omitted. The only
179 * penalty is that some I/O remains active until the procedure
180 * completes. The next time when the filesystem is mounted writable
181 * again, the device replace operation continues.
186 static const char * const logtypes
[] = {
198 * Use one ratelimit state per log level so that a flood of less important
199 * messages doesn't cause more important ones to be dropped.
201 static struct ratelimit_state printk_limits
[] = {
202 RATELIMIT_STATE_INIT(printk_limits
[0], DEFAULT_RATELIMIT_INTERVAL
, 100),
203 RATELIMIT_STATE_INIT(printk_limits
[1], DEFAULT_RATELIMIT_INTERVAL
, 100),
204 RATELIMIT_STATE_INIT(printk_limits
[2], DEFAULT_RATELIMIT_INTERVAL
, 100),
205 RATELIMIT_STATE_INIT(printk_limits
[3], DEFAULT_RATELIMIT_INTERVAL
, 100),
206 RATELIMIT_STATE_INIT(printk_limits
[4], DEFAULT_RATELIMIT_INTERVAL
, 100),
207 RATELIMIT_STATE_INIT(printk_limits
[5], DEFAULT_RATELIMIT_INTERVAL
, 100),
208 RATELIMIT_STATE_INIT(printk_limits
[6], DEFAULT_RATELIMIT_INTERVAL
, 100),
209 RATELIMIT_STATE_INIT(printk_limits
[7], DEFAULT_RATELIMIT_INTERVAL
, 100),
212 void __cold
_btrfs_printk(const struct btrfs_fs_info
*fs_info
, const char *fmt
, ...)
214 char lvl
[PRINTK_MAX_SINGLE_HEADER_LEN
+ 1] = "\0";
215 struct va_format vaf
;
218 const char *type
= logtypes
[4];
219 struct ratelimit_state
*ratelimit
= &printk_limits
[4];
221 #ifdef CONFIG_PRINTK_INDEX
222 printk_index_subsys_emit("%sBTRFS %s (device %s): ", NULL
, fmt
);
227 while ((kern_level
= printk_get_level(fmt
)) != 0) {
228 size_t size
= printk_skip_level(fmt
) - fmt
;
230 if (kern_level
>= '0' && kern_level
<= '7') {
231 memcpy(lvl
, fmt
, size
);
233 type
= logtypes
[kern_level
- '0'];
234 ratelimit
= &printk_limits
[kern_level
- '0'];
242 /* Do not ratelimit if CONFIG_BTRFS_DEBUG is enabled. */
243 if (IS_ENABLED(CONFIG_BTRFS_DEBUG
) || __ratelimit(ratelimit
)) {
245 char statestr
[STATE_STRING_BUF_LEN
];
247 btrfs_state_to_string(fs_info
, statestr
);
248 _printk("%sBTRFS %s (device %s%s): %pV\n", lvl
, type
,
249 fs_info
->sb
->s_id
, statestr
, &vaf
);
251 _printk("%sBTRFS %s: %pV\n", lvl
, type
, &vaf
);
259 #if BITS_PER_LONG == 32
260 void __cold
btrfs_warn_32bit_limit(struct btrfs_fs_info
*fs_info
)
262 if (!test_and_set_bit(BTRFS_FS_32BIT_WARN
, &fs_info
->flags
)) {
263 btrfs_warn(fs_info
, "reaching 32bit limit for logical addresses");
265 "due to page cache limit on 32bit systems, btrfs can't access metadata at or beyond %lluT",
266 BTRFS_32BIT_MAX_FILE_SIZE
>> 40);
268 "please consider upgrading to 64bit kernel/hardware");
272 void __cold
btrfs_err_32bit_limit(struct btrfs_fs_info
*fs_info
)
274 if (!test_and_set_bit(BTRFS_FS_32BIT_ERROR
, &fs_info
->flags
)) {
275 btrfs_err(fs_info
, "reached 32bit limit for logical addresses");
277 "due to page cache limit on 32bit systems, metadata beyond %lluT can't be accessed",
278 BTRFS_32BIT_MAX_FILE_SIZE
>> 40);
280 "please consider upgrading to 64bit kernel/hardware");
286 * Decode unexpected, fatal errors from the caller, issue an alert, and either
287 * panic or BUGs, depending on mount options.
290 void __btrfs_panic(const struct btrfs_fs_info
*fs_info
, const char *function
,
291 unsigned int line
, int error
, const char *fmt
, ...)
293 char *s_id
= "<unknown>";
295 struct va_format vaf
= { .fmt
= fmt
};
299 s_id
= fs_info
->sb
->s_id
;
304 errstr
= btrfs_decode_error(error
);
305 if (fs_info
&& (btrfs_test_opt(fs_info
, PANIC_ON_FATAL_ERROR
)))
306 panic(KERN_CRIT
"BTRFS panic (device %s) in %s:%d: %pV (errno=%d %s)\n",
307 s_id
, function
, line
, &vaf
, error
, errstr
);
309 btrfs_crit(fs_info
, "panic in %s:%d: %pV (errno=%d %s)",
310 function
, line
, &vaf
, error
, errstr
);
312 /* Caller calls BUG() */