1 // SPDX-License-Identifier: GPL-2.0
6 #include "transaction.h"
7 #include "space-info.h"
12 #define STATE_STRING_PREFACE ": state "
13 #define STATE_STRING_BUF_LEN (sizeof(STATE_STRING_PREFACE) + BTRFS_FS_STATE_COUNT + 1)
16 * Characters to print to indicate error conditions or uncommon filesystem state.
19 static const char fs_state_chars[] = {
20 [BTRFS_FS_STATE_REMOUNTING] = 'M',
21 [BTRFS_FS_STATE_RO] = 0,
22 [BTRFS_FS_STATE_TRANS_ABORTED] = 'A',
23 [BTRFS_FS_STATE_DEV_REPLACING] = 'R',
24 [BTRFS_FS_STATE_DUMMY_FS_INFO] = 0,
25 [BTRFS_FS_STATE_NO_CSUMS] = 'C',
26 [BTRFS_FS_STATE_LOG_CLEANUP_ERROR] = 'L',
29 static void btrfs_state_to_string(const struct btrfs_fs_info *info, char *buf)
32 bool states_printed = false;
33 unsigned long fs_state = READ_ONCE(info->fs_state);
36 memcpy(curr, STATE_STRING_PREFACE, sizeof(STATE_STRING_PREFACE));
37 curr += sizeof(STATE_STRING_PREFACE) - 1;
39 if (BTRFS_FS_ERROR(info)) {
41 states_printed = true;
44 for_each_set_bit(bit, &fs_state, sizeof(fs_state)) {
45 WARN_ON_ONCE(bit >= BTRFS_FS_STATE_COUNT);
46 if ((bit < BTRFS_FS_STATE_COUNT) && fs_state_chars[bit]) {
47 *curr++ = fs_state_chars[bit];
48 states_printed = true;
52 /* If no states were printed, reset the buffer */
61 * Generally the error codes correspond to their respective errors, but there
62 * are a few special cases.
64 * EUCLEAN: Any sort of corruption that we encounter. The tree-checker for
65 * instance will return EUCLEAN if any of the blocks are corrupted in
66 * a way that is problematic. We want to reserve EUCLEAN for these
67 * sort of corruptions.
69 * EROFS: If we check BTRFS_FS_STATE_ERROR and fail out with a return error, we
70 * need to use EROFS for this case. We will have no idea of the
71 * original failure, that will have been reported at the time we tripped
72 * over the error. Each subsequent error that doesn't have any context
73 * of the original error should use EROFS when handling BTRFS_FS_STATE_ERROR.
75 const char * __attribute_const__ btrfs_decode_error(int errno)
77 char *errstr = "unknown";
80 case -ENOENT: /* -2 */
81 errstr = "No such entry";
84 errstr = "IO failure";
86 case -ENOMEM: /* -12*/
87 errstr = "Out of memory";
89 case -EEXIST: /* -17 */
90 errstr = "Object already exists";
92 case -ENOSPC: /* -28 */
93 errstr = "No space left";
95 case -EROFS: /* -30 */
96 errstr = "Readonly filesystem";
98 case -EOPNOTSUPP: /* -95 */
99 errstr = "Operation not supported";
101 case -EUCLEAN: /* -117 */
102 errstr = "Filesystem corrupted";
104 case -EDQUOT: /* -122 */
105 errstr = "Quota exceeded";
113 * __btrfs_handle_fs_error decodes expected errors from the caller and
114 * invokes the appropriate error response.
117 void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function,
118 unsigned int line, int errno, const char *fmt, ...)
120 struct super_block *sb = fs_info->sb;
122 char statestr[STATE_STRING_BUF_LEN];
126 #ifdef CONFIG_PRINTK_INDEX
127 printk_index_subsys_emit(
128 "BTRFS: error (device %s%s) in %s:%d: errno=%d %s", KERN_CRIT, fmt);
132 * Special case: if the error is EROFS, and we're already under
133 * SB_RDONLY, then it is safe here.
135 if (errno == -EROFS && sb_rdonly(sb))
139 errstr = btrfs_decode_error(errno);
140 btrfs_state_to_string(fs_info, statestr);
142 struct va_format vaf;
149 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s (%pV)\n",
150 sb->s_id, statestr, function, line, errno, errstr, &vaf);
153 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s\n",
154 sb->s_id, statestr, function, line, errno, errstr);
159 * Today we only save the error info to memory. Long term we'll also
160 * send it down to the disk.
162 WRITE_ONCE(fs_info->fs_error, errno);
164 /* Don't go through full error handling during mount. */
165 if (!(sb->s_flags & SB_BORN))
171 btrfs_discard_stop(fs_info);
173 /* Handle error by forcing the filesystem readonly. */
174 btrfs_set_sb_rdonly(sb);
175 btrfs_info(fs_info, "forced readonly");
177 * Note that a running device replace operation is not canceled here
178 * although there is no way to update the progress. It would add the
179 * risk of a deadlock, therefore the canceling is omitted. The only
180 * penalty is that some I/O remains active until the procedure
181 * completes. The next time when the filesystem is mounted writable
182 * again, the device replace operation continues.
187 static const char * const logtypes[] = {
199 * Use one ratelimit state per log level so that a flood of less important
200 * messages doesn't cause more important ones to be dropped.
202 static struct ratelimit_state printk_limits[] = {
203 RATELIMIT_STATE_INIT(printk_limits[0], DEFAULT_RATELIMIT_INTERVAL, 100),
204 RATELIMIT_STATE_INIT(printk_limits[1], DEFAULT_RATELIMIT_INTERVAL, 100),
205 RATELIMIT_STATE_INIT(printk_limits[2], DEFAULT_RATELIMIT_INTERVAL, 100),
206 RATELIMIT_STATE_INIT(printk_limits[3], DEFAULT_RATELIMIT_INTERVAL, 100),
207 RATELIMIT_STATE_INIT(printk_limits[4], DEFAULT_RATELIMIT_INTERVAL, 100),
208 RATELIMIT_STATE_INIT(printk_limits[5], DEFAULT_RATELIMIT_INTERVAL, 100),
209 RATELIMIT_STATE_INIT(printk_limits[6], DEFAULT_RATELIMIT_INTERVAL, 100),
210 RATELIMIT_STATE_INIT(printk_limits[7], DEFAULT_RATELIMIT_INTERVAL, 100),
213 void __cold _btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
215 char lvl[PRINTK_MAX_SINGLE_HEADER_LEN + 1] = "\0";
216 struct va_format vaf;
219 const char *type = logtypes[4];
220 struct ratelimit_state *ratelimit = &printk_limits[4];
222 #ifdef CONFIG_PRINTK_INDEX
223 printk_index_subsys_emit("%sBTRFS %s (device %s): ", NULL, fmt);
228 while ((kern_level = printk_get_level(fmt)) != 0) {
229 size_t size = printk_skip_level(fmt) - fmt;
231 if (kern_level >= '0' && kern_level <= '7') {
232 memcpy(lvl, fmt, size);
234 type = logtypes[kern_level - '0'];
235 ratelimit = &printk_limits[kern_level - '0'];
243 if (__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 * __btrfs_panic decodes unexpected, fatal errors from the caller, issues an
287 * alert, and either panics or BUGs, depending on mount options.
290 void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,
291 unsigned int line, int errno, 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(errno);
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, errno, errstr);
309 btrfs_crit(fs_info, "panic in %s:%d: %pV (errno=%d %s)",
310 function, line, &vaf, errno, errstr);
312 /* Caller calls BUG() */