Merge tag 'x86_microcode_for_v6.5' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-block.git] / fs / btrfs / messages.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 #include "fs.h"
4 #include "messages.h"
5 #include "discard.h"
6 #include "transaction.h"
7 #include "space-info.h"
8 #include "super.h"
9
10 #ifdef CONFIG_PRINTK
11
12 #define STATE_STRING_PREFACE    ": state "
13 #define STATE_STRING_BUF_LEN    (sizeof(STATE_STRING_PREFACE) + BTRFS_FS_STATE_COUNT)
14
15 /*
16  * Characters to print to indicate error conditions or uncommon filesystem state.
17  * RO is not an error.
18  */
19 static const char fs_state_chars[] = {
20         [BTRFS_FS_STATE_ERROR]                  = 'E',
21         [BTRFS_FS_STATE_REMOUNTING]             = 'M',
22         [BTRFS_FS_STATE_RO]                     = 0,
23         [BTRFS_FS_STATE_TRANS_ABORTED]          = 'A',
24         [BTRFS_FS_STATE_DEV_REPLACING]          = 'R',
25         [BTRFS_FS_STATE_DUMMY_FS_INFO]          = 0,
26         [BTRFS_FS_STATE_NO_CSUMS]               = 'C',
27         [BTRFS_FS_STATE_LOG_CLEANUP_ERROR]      = 'L',
28 };
29
30 static void btrfs_state_to_string(const struct btrfs_fs_info *info, char *buf)
31 {
32         unsigned int bit;
33         bool states_printed = false;
34         unsigned long fs_state = READ_ONCE(info->fs_state);
35         char *curr = buf;
36
37         memcpy(curr, STATE_STRING_PREFACE, sizeof(STATE_STRING_PREFACE));
38         curr += sizeof(STATE_STRING_PREFACE) - 1;
39
40         for_each_set_bit(bit, &fs_state, sizeof(fs_state)) {
41                 WARN_ON_ONCE(bit >= BTRFS_FS_STATE_COUNT);
42                 if ((bit < BTRFS_FS_STATE_COUNT) && fs_state_chars[bit]) {
43                         *curr++ = fs_state_chars[bit];
44                         states_printed = true;
45                 }
46         }
47
48         /* If no states were printed, reset the buffer */
49         if (!states_printed)
50                 curr = buf;
51
52         *curr++ = 0;
53 }
54 #endif
55
56 /*
57  * Generally the error codes correspond to their respective errors, but there
58  * are a few special cases.
59  *
60  * EUCLEAN: Any sort of corruption that we encounter.  The tree-checker for
61  *          instance will return EUCLEAN if any of the blocks are corrupted in
62  *          a way that is problematic.  We want to reserve EUCLEAN for these
63  *          sort of corruptions.
64  *
65  * EROFS: If we check BTRFS_FS_STATE_ERROR and fail out with a return error, we
66  *        need to use EROFS for this case.  We will have no idea of the
67  *        original failure, that will have been reported at the time we tripped
68  *        over the error.  Each subsequent error that doesn't have any context
69  *        of the original error should use EROFS when handling BTRFS_FS_STATE_ERROR.
70  */
71 const char * __attribute_const__ btrfs_decode_error(int errno)
72 {
73         char *errstr = "unknown";
74
75         switch (errno) {
76         case -ENOENT:           /* -2 */
77                 errstr = "No such entry";
78                 break;
79         case -EIO:              /* -5 */
80                 errstr = "IO failure";
81                 break;
82         case -ENOMEM:           /* -12*/
83                 errstr = "Out of memory";
84                 break;
85         case -EEXIST:           /* -17 */
86                 errstr = "Object already exists";
87                 break;
88         case -ENOSPC:           /* -28 */
89                 errstr = "No space left";
90                 break;
91         case -EROFS:            /* -30 */
92                 errstr = "Readonly filesystem";
93                 break;
94         case -EOPNOTSUPP:       /* -95 */
95                 errstr = "Operation not supported";
96                 break;
97         case -EUCLEAN:          /* -117 */
98                 errstr = "Filesystem corrupted";
99                 break;
100         case -EDQUOT:           /* -122 */
101                 errstr = "Quota exceeded";
102                 break;
103         }
104
105         return errstr;
106 }
107
108 /*
109  * __btrfs_handle_fs_error decodes expected errors from the caller and
110  * invokes the appropriate error response.
111  */
112 __cold
113 void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function,
114                        unsigned int line, int errno, const char *fmt, ...)
115 {
116         struct super_block *sb = fs_info->sb;
117 #ifdef CONFIG_PRINTK
118         char statestr[STATE_STRING_BUF_LEN];
119         const char *errstr;
120 #endif
121
122 #ifdef CONFIG_PRINTK_INDEX
123         printk_index_subsys_emit(
124                 "BTRFS: error (device %s%s) in %s:%d: errno=%d %s", KERN_CRIT, fmt);
125 #endif
126
127         /*
128          * Special case: if the error is EROFS, and we're already under
129          * SB_RDONLY, then it is safe here.
130          */
131         if (errno == -EROFS && sb_rdonly(sb))
132                 return;
133
134 #ifdef CONFIG_PRINTK
135         errstr = btrfs_decode_error(errno);
136         btrfs_state_to_string(fs_info, statestr);
137         if (fmt) {
138                 struct va_format vaf;
139                 va_list args;
140
141                 va_start(args, fmt);
142                 vaf.fmt = fmt;
143                 vaf.va = &args;
144
145                 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s (%pV)\n",
146                         sb->s_id, statestr, function, line, errno, errstr, &vaf);
147                 va_end(args);
148         } else {
149                 pr_crit("BTRFS: error (device %s%s) in %s:%d: errno=%d %s\n",
150                         sb->s_id, statestr, function, line, errno, errstr);
151         }
152 #endif
153
154         /*
155          * Today we only save the error info to memory.  Long term we'll also
156          * send it down to the disk.
157          */
158         set_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state);
159
160         /* Don't go through full error handling during mount. */
161         if (!(sb->s_flags & SB_BORN))
162                 return;
163
164         if (sb_rdonly(sb))
165                 return;
166
167         btrfs_discard_stop(fs_info);
168
169         /* Handle error by forcing the filesystem readonly. */
170         btrfs_set_sb_rdonly(sb);
171         btrfs_info(fs_info, "forced readonly");
172         /*
173          * Note that a running device replace operation is not canceled here
174          * although there is no way to update the progress. It would add the
175          * risk of a deadlock, therefore the canceling is omitted. The only
176          * penalty is that some I/O remains active until the procedure
177          * completes. The next time when the filesystem is mounted writable
178          * again, the device replace operation continues.
179          */
180 }
181
182 #ifdef CONFIG_PRINTK
183 static const char * const logtypes[] = {
184         "emergency",
185         "alert",
186         "critical",
187         "error",
188         "warning",
189         "notice",
190         "info",
191         "debug",
192 };
193
194 /*
195  * Use one ratelimit state per log level so that a flood of less important
196  * messages doesn't cause more important ones to be dropped.
197  */
198 static struct ratelimit_state printk_limits[] = {
199         RATELIMIT_STATE_INIT(printk_limits[0], DEFAULT_RATELIMIT_INTERVAL, 100),
200         RATELIMIT_STATE_INIT(printk_limits[1], DEFAULT_RATELIMIT_INTERVAL, 100),
201         RATELIMIT_STATE_INIT(printk_limits[2], DEFAULT_RATELIMIT_INTERVAL, 100),
202         RATELIMIT_STATE_INIT(printk_limits[3], DEFAULT_RATELIMIT_INTERVAL, 100),
203         RATELIMIT_STATE_INIT(printk_limits[4], DEFAULT_RATELIMIT_INTERVAL, 100),
204         RATELIMIT_STATE_INIT(printk_limits[5], DEFAULT_RATELIMIT_INTERVAL, 100),
205         RATELIMIT_STATE_INIT(printk_limits[6], DEFAULT_RATELIMIT_INTERVAL, 100),
206         RATELIMIT_STATE_INIT(printk_limits[7], DEFAULT_RATELIMIT_INTERVAL, 100),
207 };
208
209 void __cold _btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
210 {
211         char lvl[PRINTK_MAX_SINGLE_HEADER_LEN + 1] = "\0";
212         struct va_format vaf;
213         va_list args;
214         int kern_level;
215         const char *type = logtypes[4];
216         struct ratelimit_state *ratelimit = &printk_limits[4];
217
218 #ifdef CONFIG_PRINTK_INDEX
219         printk_index_subsys_emit("%sBTRFS %s (device %s): ", NULL, fmt);
220 #endif
221
222         va_start(args, fmt);
223
224         while ((kern_level = printk_get_level(fmt)) != 0) {
225                 size_t size = printk_skip_level(fmt) - fmt;
226
227                 if (kern_level >= '0' && kern_level <= '7') {
228                         memcpy(lvl, fmt,  size);
229                         lvl[size] = '\0';
230                         type = logtypes[kern_level - '0'];
231                         ratelimit = &printk_limits[kern_level - '0'];
232                 }
233                 fmt += size;
234         }
235
236         vaf.fmt = fmt;
237         vaf.va = &args;
238
239         if (__ratelimit(ratelimit)) {
240                 if (fs_info) {
241                         char statestr[STATE_STRING_BUF_LEN];
242
243                         btrfs_state_to_string(fs_info, statestr);
244                         _printk("%sBTRFS %s (device %s%s): %pV\n", lvl, type,
245                                 fs_info->sb->s_id, statestr, &vaf);
246                 } else {
247                         _printk("%sBTRFS %s: %pV\n", lvl, type, &vaf);
248                 }
249         }
250
251         va_end(args);
252 }
253 #endif
254
255 void __cold btrfs_print_v0_err(struct btrfs_fs_info *fs_info)
256 {
257         btrfs_err(fs_info,
258 "Unsupported V0 extent filesystem detected. Aborting. Please re-create your filesystem with a newer kernel");
259 }
260
261 #if BITS_PER_LONG == 32
262 void __cold btrfs_warn_32bit_limit(struct btrfs_fs_info *fs_info)
263 {
264         if (!test_and_set_bit(BTRFS_FS_32BIT_WARN, &fs_info->flags)) {
265                 btrfs_warn(fs_info, "reaching 32bit limit for logical addresses");
266                 btrfs_warn(fs_info,
267 "due to page cache limit on 32bit systems, btrfs can't access metadata at or beyond %lluT",
268                            BTRFS_32BIT_MAX_FILE_SIZE >> 40);
269                 btrfs_warn(fs_info,
270                            "please consider upgrading to 64bit kernel/hardware");
271         }
272 }
273
274 void __cold btrfs_err_32bit_limit(struct btrfs_fs_info *fs_info)
275 {
276         if (!test_and_set_bit(BTRFS_FS_32BIT_ERROR, &fs_info->flags)) {
277                 btrfs_err(fs_info, "reached 32bit limit for logical addresses");
278                 btrfs_err(fs_info,
279 "due to page cache limit on 32bit systems, metadata beyond %lluT can't be accessed",
280                           BTRFS_32BIT_MAX_FILE_SIZE >> 40);
281                 btrfs_err(fs_info,
282                            "please consider upgrading to 64bit kernel/hardware");
283         }
284 }
285 #endif
286
287 /*
288  * __btrfs_panic decodes unexpected, fatal errors from the caller, issues an
289  * alert, and either panics or BUGs, depending on mount options.
290  */
291 __cold
292 void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,
293                    unsigned int line, int errno, const char *fmt, ...)
294 {
295         char *s_id = "<unknown>";
296         const char *errstr;
297         struct va_format vaf = { .fmt = fmt };
298         va_list args;
299
300         if (fs_info)
301                 s_id = fs_info->sb->s_id;
302
303         va_start(args, fmt);
304         vaf.va = &args;
305
306         errstr = btrfs_decode_error(errno);
307         if (fs_info && (btrfs_test_opt(fs_info, PANIC_ON_FATAL_ERROR)))
308                 panic(KERN_CRIT "BTRFS panic (device %s) in %s:%d: %pV (errno=%d %s)\n",
309                         s_id, function, line, &vaf, errno, errstr);
310
311         btrfs_crit(fs_info, "panic in %s:%d: %pV (errno=%d %s)",
312                    function, line, &vaf, errno, errstr);
313         va_end(args);
314         /* Caller calls BUG() */
315 }