1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_ERRCODE_H
3 #define _BCACHEFS_ERRCODE_H
4
5 #define BCH_ERRCODES() \
6 x(ERANGE, ERANGE_option_too_small) \
7 x(ERANGE, ERANGE_option_too_big) \
8 x(EINVAL, mount_option) \
9 x(BCH_ERR_mount_option, option_name) \
10 x(BCH_ERR_mount_option, option_value) \
11 x(BCH_ERR_mount_option, option_not_bool) \
12 x(ENOMEM, ENOMEM_stripe_buf) \
13 x(ENOMEM, ENOMEM_replicas_table) \
14 x(ENOMEM, ENOMEM_cpu_replicas) \
15 x(ENOMEM, ENOMEM_replicas_gc) \
16 x(ENOMEM, ENOMEM_disk_groups_validate) \
17 x(ENOMEM, ENOMEM_disk_groups_to_cpu) \
18 x(ENOMEM, ENOMEM_mark_snapshot) \
19 x(ENOMEM, ENOMEM_mark_stripe) \
20 x(ENOMEM, ENOMEM_mark_stripe_ptr) \
21 x(ENOMEM, ENOMEM_btree_key_cache_create) \
22 x(ENOMEM, ENOMEM_btree_key_cache_fill) \
23 x(ENOMEM, ENOMEM_btree_key_cache_insert) \
24 x(ENOMEM, ENOMEM_trans_kmalloc) \
25 x(ENOMEM, ENOMEM_trans_log_msg) \
26 x(ENOMEM, ENOMEM_do_encrypt) \
27 x(ENOMEM, ENOMEM_ec_read_extent) \
28 x(ENOMEM, ENOMEM_ec_stripe_mem_alloc) \
29 x(ENOMEM, ENOMEM_ec_new_stripe_alloc) \
30 x(ENOMEM, ENOMEM_fs_btree_cache_init) \
31 x(ENOMEM, ENOMEM_fs_btree_key_cache_init) \
32 x(ENOMEM, ENOMEM_fs_counters_init) \
33 x(ENOMEM, ENOMEM_fs_btree_write_buffer_init) \
34 x(ENOMEM, ENOMEM_io_clock_init) \
35 x(ENOMEM, ENOMEM_blacklist_table_init) \
36 x(ENOMEM, ENOMEM_sb_realloc_injected) \
37 x(ENOMEM, ENOMEM_sb_bio_realloc) \
38 x(ENOMEM, ENOMEM_sb_buf_realloc) \
39 x(ENOMEM, ENOMEM_sb_journal_validate) \
40 x(ENOMEM, ENOMEM_sb_journal_v2_validate) \
41 x(ENOMEM, ENOMEM_journal_entry_add) \
42 x(ENOMEM, ENOMEM_journal_read_buf_realloc) \
43 x(ENOMEM, ENOMEM_btree_interior_update_worker_init)\
44 x(ENOMEM, ENOMEM_btree_interior_update_pool_init) \
45 x(ENOMEM, ENOMEM_bio_read_init) \
46 x(ENOMEM, ENOMEM_bio_read_split_init) \
47 x(ENOMEM, ENOMEM_bio_write_init) \
48 x(ENOMEM, ENOMEM_bio_bounce_pages_init) \
49 x(ENOMEM, ENOMEM_writepage_bioset_init) \
50 x(ENOMEM, ENOMEM_dio_read_bioset_init) \
51 x(ENOMEM, ENOMEM_dio_write_bioset_init) \
52 x(ENOMEM, ENOMEM_nocow_flush_bioset_init) \
53 x(ENOMEM, ENOMEM_promote_table_init) \
54 x(ENOMEM, ENOMEM_compression_bounce_read_init) \
55 x(ENOMEM, ENOMEM_compression_bounce_write_init) \
56 x(ENOMEM, ENOMEM_compression_workspace_init) \
57 x(ENOMEM, ENOMEM_backpointer_mismatches_bitmap) \
58 x(EIO, compression_workspace_not_initialized) \
59 x(ENOMEM, ENOMEM_bucket_gens) \
60 x(ENOMEM, ENOMEM_buckets_nouse) \
61 x(ENOMEM, ENOMEM_usage_init) \
62 x(ENOMEM, ENOMEM_btree_node_read_all_replicas) \
63 x(ENOMEM, ENOMEM_btree_node_reclaim) \
64 x(ENOMEM, ENOMEM_btree_node_mem_alloc) \
65 x(ENOMEM, ENOMEM_btree_cache_cannibalize_lock) \
66 x(ENOMEM, ENOMEM_buckets_waiting_for_journal_init)\
67 x(ENOMEM, ENOMEM_buckets_waiting_for_journal_set) \
68 x(ENOMEM, ENOMEM_set_nr_journal_buckets) \
69 x(ENOMEM, ENOMEM_dev_journal_init) \
70 x(ENOMEM, ENOMEM_journal_pin_fifo) \
71 x(ENOMEM, ENOMEM_journal_buf) \
72 x(ENOMEM, ENOMEM_gc_start) \
73 x(ENOMEM, ENOMEM_gc_alloc_start) \
74 x(ENOMEM, ENOMEM_gc_reflink_start) \
75 x(ENOMEM, ENOMEM_gc_gens) \
76 x(ENOMEM, ENOMEM_gc_repair_key) \
77 x(ENOMEM, ENOMEM_fsck_extent_ends_at) \
78 x(ENOMEM, ENOMEM_fsck_add_nlink) \
79 x(ENOMEM, ENOMEM_journal_key_insert) \
80 x(ENOMEM, ENOMEM_journal_keys_sort) \
81 x(ENOMEM, ENOMEM_read_superblock_clean) \
82 x(ENOMEM, ENOMEM_fs_alloc) \
83 x(ENOMEM, ENOMEM_fs_name_alloc) \
84 x(ENOMEM, ENOMEM_fs_other_alloc) \
85 x(ENOMEM, ENOMEM_dev_alloc) \
86 x(ENOMEM, ENOMEM_disk_accounting) \
87 x(ENOMEM, ENOMEM_stripe_head_alloc) \
88 x(ENOMEM, ENOMEM_journal_read_bucket) \
89 x(ENOSPC, ENOSPC_disk_reservation) \
90 x(ENOSPC, ENOSPC_bucket_alloc) \
91 x(ENOSPC, ENOSPC_disk_label_add) \
92 x(ENOSPC, ENOSPC_stripe_create) \
93 x(ENOSPC, ENOSPC_inode_create) \
94 x(ENOSPC, ENOSPC_str_hash_create) \
95 x(ENOSPC, ENOSPC_snapshot_create) \
96 x(ENOSPC, ENOSPC_subvolume_create) \
97 x(ENOSPC, ENOSPC_sb) \
98 x(ENOSPC, ENOSPC_sb_journal) \
99 x(ENOSPC, ENOSPC_sb_journal_seq_blacklist) \
100 x(ENOSPC, ENOSPC_sb_quota) \
101 x(ENOSPC, ENOSPC_sb_replicas) \
102 x(ENOSPC, ENOSPC_sb_members) \
103 x(ENOSPC, ENOSPC_sb_members_v2) \
104 x(ENOSPC, ENOSPC_sb_crypt) \
105 x(ENOSPC, ENOSPC_sb_downgrade) \
106 x(ENOSPC, ENOSPC_btree_slot) \
107 x(ENOSPC, ENOSPC_snapshot_tree) \
108 x(ENOENT, ENOENT_bkey_type_mismatch) \
109 x(ENOENT, ENOENT_str_hash_lookup) \
110 x(ENOENT, ENOENT_str_hash_set_must_replace) \
111 x(ENOENT, ENOENT_inode) \
112 x(ENOENT, ENOENT_not_subvol) \
113 x(ENOENT, ENOENT_not_directory) \
114 x(ENOENT, ENOENT_directory_dead) \
115 x(ENOENT, ENOENT_subvolume) \
116 x(ENOENT, ENOENT_snapshot_tree) \
117 x(ENOENT, ENOENT_dirent_doesnt_match_inode) \
118 x(ENOENT, ENOENT_dev_not_found) \
119 x(ENOENT, ENOENT_dev_bucket_not_found) \
120 x(ENOENT, ENOENT_dev_idx_not_found) \
121 x(ENOENT, ENOENT_inode_no_backpointer) \
122 x(ENOENT, ENOENT_no_snapshot_tree_subvol) \
123 x(ENOENT, btree_node_dying) \
124 x(ENOTEMPTY, ENOTEMPTY_dir_not_empty) \
125 x(ENOTEMPTY, ENOTEMPTY_subvol_not_empty) \
126 x(EEXIST, EEXIST_str_hash_set) \
127 x(EEXIST, EEXIST_discard_in_flight_add) \
128 x(EEXIST, EEXIST_subvolume_create) \
129 x(ENOSPC, open_buckets_empty) \
130 x(ENOSPC, freelist_empty) \
131 x(BCH_ERR_freelist_empty, no_buckets_found) \
132 x(0, transaction_restart) \
133 x(BCH_ERR_transaction_restart, transaction_restart_fault_inject) \
134 x(BCH_ERR_transaction_restart, transaction_restart_relock) \
135 x(BCH_ERR_transaction_restart, transaction_restart_relock_path) \
136 x(BCH_ERR_transaction_restart, transaction_restart_relock_path_intent) \
137 x(BCH_ERR_transaction_restart, transaction_restart_relock_after_fill) \
138 x(BCH_ERR_transaction_restart, transaction_restart_too_many_iters) \
139 x(BCH_ERR_transaction_restart, transaction_restart_lock_node_reused) \
140 x(BCH_ERR_transaction_restart, transaction_restart_fill_relock) \
141 x(BCH_ERR_transaction_restart, transaction_restart_fill_mem_alloc_fail)\
142 x(BCH_ERR_transaction_restart, transaction_restart_mem_realloced) \
143 x(BCH_ERR_transaction_restart, transaction_restart_in_traverse_all) \
144 x(BCH_ERR_transaction_restart, transaction_restart_would_deadlock) \
145 x(BCH_ERR_transaction_restart, transaction_restart_would_deadlock_write)\
146 x(BCH_ERR_transaction_restart, transaction_restart_deadlock_recursion_limit)\
147 x(BCH_ERR_transaction_restart, transaction_restart_upgrade) \
148 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_upgrade) \
149 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_fill) \
150 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_raced) \
151 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_realloced)\
152 x(BCH_ERR_transaction_restart, transaction_restart_journal_preres_get) \
153 x(BCH_ERR_transaction_restart, transaction_restart_split_race) \
154 x(BCH_ERR_transaction_restart, transaction_restart_write_buffer_flush) \
155 x(BCH_ERR_transaction_restart, transaction_restart_nested) \
156 x(BCH_ERR_transaction_restart, transaction_restart_commit) \
157 x(0, no_btree_node) \
158 x(BCH_ERR_no_btree_node, no_btree_node_relock) \
159 x(BCH_ERR_no_btree_node, no_btree_node_upgrade) \
160 x(BCH_ERR_no_btree_node, no_btree_node_drop) \
161 x(BCH_ERR_no_btree_node, no_btree_node_lock_root) \
162 x(BCH_ERR_no_btree_node, no_btree_node_up) \
163 x(BCH_ERR_no_btree_node, no_btree_node_down) \
164 x(BCH_ERR_no_btree_node, no_btree_node_init) \
165 x(BCH_ERR_no_btree_node, no_btree_node_cached) \
166 x(BCH_ERR_no_btree_node, no_btree_node_srcu_reset) \
167 x(0, btree_insert_fail) \
168 x(BCH_ERR_btree_insert_fail, btree_insert_btree_node_full) \
169 x(BCH_ERR_btree_insert_fail, btree_insert_need_mark_replicas) \
170 x(BCH_ERR_btree_insert_fail, btree_insert_need_journal_res) \
171 x(BCH_ERR_btree_insert_fail, btree_insert_need_journal_reclaim) \
172 x(0, backpointer_to_overwritten_btree_node) \
173 x(0, journal_reclaim_would_deadlock) \
174 x(EINVAL, fsck) \
175 x(BCH_ERR_fsck, fsck_fix) \
176 x(BCH_ERR_fsck, fsck_delete_bkey) \
177 x(BCH_ERR_fsck, fsck_ignore) \
178 x(BCH_ERR_fsck, fsck_errors_not_fixed) \
179 x(BCH_ERR_fsck, fsck_repair_unimplemented) \
180 x(BCH_ERR_fsck, fsck_repair_impossible) \
181 x(EINVAL, restart_recovery) \
182 x(EINVAL, not_in_recovery) \
183 x(EINVAL, cannot_rewind_recovery) \
184 x(0, data_update_done) \
185 x(BCH_ERR_data_update_done, data_update_done_would_block) \
186 x(BCH_ERR_data_update_done, data_update_done_unwritten) \
187 x(BCH_ERR_data_update_done, data_update_done_no_writes_needed) \
188 x(BCH_ERR_data_update_done, data_update_done_no_snapshot) \
189 x(BCH_ERR_data_update_done, data_update_done_no_dev_refs) \
190 x(BCH_ERR_data_update_done, data_update_done_no_rw_devs) \
191 x(EINVAL, device_state_not_allowed) \
192 x(EINVAL, member_info_missing) \
193 x(EINVAL, mismatched_block_size) \
194 x(EINVAL, block_size_too_small) \
195 x(EINVAL, bucket_size_too_small) \
196 x(EINVAL, device_size_too_small) \
197 x(EINVAL, device_size_too_big) \
198 x(EINVAL, device_not_a_member_of_filesystem) \
199 x(EINVAL, device_has_been_removed) \
200 x(EINVAL, device_splitbrain) \
201 x(EINVAL, device_already_online) \
202 x(EINVAL, insufficient_devices_to_start) \
203 x(EINVAL, invalid) \
204 x(EINVAL, internal_fsck_err) \
205 x(EINVAL, opt_parse_error) \
206 x(EINVAL, remove_with_metadata_missing_unimplemented)\
207 x(EINVAL, remove_would_lose_data) \
208 x(EINVAL, no_resize_with_buckets_nouse) \
209 x(EINVAL, inode_unpack_error) \
210 x(EINVAL, varint_decode_error) \
211 x(EINVAL, erasure_coding_found_btree_node) \
212 x(EOPNOTSUPP, may_not_use_incompat_feature) \
213 x(EROFS, erofs_trans_commit) \
214 x(EROFS, erofs_no_writes) \
215 x(EROFS, erofs_journal_err) \
216 x(EROFS, erofs_sb_err) \
217 x(EROFS, erofs_unfixed_errors) \
218 x(EROFS, erofs_norecovery) \
219 x(EROFS, erofs_nochanges) \
220 x(EROFS, insufficient_devices) \
221 x(0, operation_blocked) \
222 x(BCH_ERR_operation_blocked, btree_cache_cannibalize_lock_blocked) \
223 x(BCH_ERR_operation_blocked, journal_res_blocked) \
224 x(BCH_ERR_journal_res_blocked, journal_blocked) \
225 x(BCH_ERR_journal_res_blocked, journal_max_in_flight) \
226 x(BCH_ERR_journal_res_blocked, journal_max_open) \
227 x(BCH_ERR_journal_res_blocked, journal_full) \
228 x(BCH_ERR_journal_res_blocked, journal_pin_full) \
229 x(BCH_ERR_journal_res_blocked, journal_buf_enomem) \
230 x(BCH_ERR_journal_res_blocked, journal_stuck) \
231 x(BCH_ERR_journal_res_blocked, journal_retry_open) \
232 x(BCH_ERR_journal_res_blocked, journal_preres_get_blocked) \
233 x(BCH_ERR_journal_res_blocked, bucket_alloc_blocked) \
234 x(BCH_ERR_journal_res_blocked, stripe_alloc_blocked) \
235 x(BCH_ERR_invalid, invalid_sb) \
236 x(BCH_ERR_invalid_sb, invalid_sb_magic) \
237 x(BCH_ERR_invalid_sb, invalid_sb_version) \
238 x(BCH_ERR_invalid_sb, invalid_sb_features) \
239 x(BCH_ERR_invalid_sb, invalid_sb_too_big) \
240 x(BCH_ERR_invalid_sb, invalid_sb_csum_type) \
241 x(BCH_ERR_invalid_sb, invalid_sb_csum) \
242 x(BCH_ERR_invalid_sb, invalid_sb_block_size) \
243 x(BCH_ERR_invalid_sb, invalid_sb_uuid) \
244 x(BCH_ERR_invalid_sb, invalid_sb_offset) \
245 x(BCH_ERR_invalid_sb, invalid_sb_too_many_members) \
246 x(BCH_ERR_invalid_sb, invalid_sb_dev_idx) \
247 x(BCH_ERR_invalid_sb, invalid_sb_time_precision) \
248 x(BCH_ERR_invalid_sb, invalid_sb_field_size) \
249 x(BCH_ERR_invalid_sb, invalid_sb_layout) \
250 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_type) \
251 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_nr_superblocks) \
252 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_superblocks_overlap) \
253 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_sb_max_size_bits) \
254 x(BCH_ERR_invalid_sb, invalid_sb_members_missing) \
255 x(BCH_ERR_invalid_sb, invalid_sb_members) \
256 x(BCH_ERR_invalid_sb, invalid_sb_disk_groups) \
257 x(BCH_ERR_invalid_sb, invalid_sb_replicas) \
258 x(BCH_ERR_invalid_sb, invalid_replicas_entry) \
259 x(BCH_ERR_invalid_sb, invalid_sb_journal) \
260 x(BCH_ERR_invalid_sb, invalid_sb_journal_seq_blacklist) \
261 x(BCH_ERR_invalid_sb, invalid_sb_crypt) \
262 x(BCH_ERR_invalid_sb, invalid_sb_clean) \
263 x(BCH_ERR_invalid_sb, invalid_sb_quota) \
264 x(BCH_ERR_invalid_sb, invalid_sb_errors) \
265 x(BCH_ERR_invalid_sb, invalid_sb_opt_compression) \
266 x(BCH_ERR_invalid_sb, invalid_sb_ext) \
267 x(BCH_ERR_invalid_sb, invalid_sb_downgrade) \
268 x(BCH_ERR_invalid, invalid_bkey) \
269 x(BCH_ERR_operation_blocked, nocow_lock_blocked) \
270 x(EIO, journal_shutdown) \
271 x(EIO, journal_flush_err) \
272 x(EIO, journal_write_err) \
273 x(EIO, btree_node_read_err) \
274 x(BCH_ERR_btree_node_read_err, btree_node_read_err_cached) \
275 x(EIO, sb_not_downgraded) \
276 x(EIO, btree_node_write_all_failed) \
277 x(EIO, btree_node_read_error) \
278 x(EIO, btree_node_read_validate_error) \
279 x(EIO, btree_need_topology_repair) \
280 x(EIO, bucket_ref_update) \
281 x(EIO, trigger_alloc) \
282 x(EIO, trigger_pointer) \
283 x(EIO, trigger_stripe_pointer) \
284 x(EIO, metadata_bucket_inconsistency) \
285 x(EIO, mark_stripe) \
286 x(EIO, stripe_reconstruct) \
287 x(EIO, key_type_error) \
288 x(EIO, extent_poisened) \
289 x(EIO, missing_indirect_extent) \
290 x(EIO, invalidate_stripe_to_dev) \
291 x(EIO, no_encryption_key) \
292 x(EIO, insufficient_journal_devices) \
293 x(EIO, device_offline) \
294 x(EIO, EIO_fault_injected) \
295 x(EIO, ec_block_read) \
296 x(EIO, ec_block_write) \
297 x(EIO, recompute_checksum) \
298 x(EIO, decompress) \
299 x(BCH_ERR_decompress, decompress_exceeded_max_encoded_extent) \
300 x(BCH_ERR_decompress, decompress_lz4) \
301 x(BCH_ERR_decompress, decompress_gzip) \
302 x(BCH_ERR_decompress, decompress_zstd_src_len_bad) \
303 x(BCH_ERR_decompress, decompress_zstd) \
304 x(EIO, data_write) \
305 x(BCH_ERR_data_write, data_write_io) \
306 x(BCH_ERR_data_write, data_write_csum) \
307 x(BCH_ERR_data_write, data_write_invalid_ptr) \
308 x(BCH_ERR_data_write, data_write_misaligned) \
309 x(BCH_ERR_decompress, data_read) \
310 x(BCH_ERR_data_read, no_device_to_read_from) \
311 x(BCH_ERR_data_read, data_read_io_err) \
312 x(BCH_ERR_data_read, data_read_csum_err) \
313 x(BCH_ERR_data_read, data_read_retry) \
314 x(BCH_ERR_data_read_retry, data_read_retry_avoid) \
315 x(BCH_ERR_data_read_retry_avoid,data_read_retry_device_offline) \
316 x(BCH_ERR_data_read_retry_avoid,data_read_retry_io_err) \
317 x(BCH_ERR_data_read_retry_avoid,data_read_retry_ec_reconstruct_err) \
318 x(BCH_ERR_data_read_retry_avoid,data_read_retry_csum_err) \
319 x(BCH_ERR_data_read_retry, data_read_retry_csum_err_maybe_userspace)\
320 x(BCH_ERR_data_read, data_read_decompress_err) \
321 x(BCH_ERR_data_read, data_read_decrypt_err) \
322 x(BCH_ERR_data_read, data_read_ptr_stale_race) \
323 x(BCH_ERR_data_read_retry, data_read_ptr_stale_retry) \
324 x(BCH_ERR_data_read, data_read_no_encryption_key) \
325 x(BCH_ERR_data_read, data_read_buffer_too_small) \
326 x(BCH_ERR_data_read, data_read_key_overwritten) \
327 x(BCH_ERR_btree_node_read_err, btree_node_read_err_fixable) \
328 x(BCH_ERR_btree_node_read_err, btree_node_read_err_want_retry) \
329 x(BCH_ERR_btree_node_read_err, btree_node_read_err_must_retry) \
330 x(BCH_ERR_btree_node_read_err, btree_node_read_err_bad_node) \
331 x(BCH_ERR_btree_node_read_err, btree_node_read_err_incompatible) \
332 x(0, nopromote) \
333 x(BCH_ERR_nopromote, nopromote_may_not) \
334 x(BCH_ERR_nopromote, nopromote_already_promoted) \
335 x(BCH_ERR_nopromote, nopromote_unwritten) \
336 x(BCH_ERR_nopromote, nopromote_congested) \
337 x(BCH_ERR_nopromote, nopromote_in_flight) \
338 x(BCH_ERR_nopromote, nopromote_no_writes) \
339 x(BCH_ERR_nopromote, nopromote_enomem) \
340 x(0, invalid_snapshot_node) \
341 x(0, option_needs_open_fs) \
342 x(0, remove_disk_accounting_entry)
343
344 enum bch_errcode {
345 BCH_ERR_START = 2048,
346 #define x(class, err) BCH_ERR_##err,
347 BCH_ERRCODES()
348 #undef x
349 BCH_ERR_MAX
350 };
351
352 const char *bch2_err_str(int);
353 bool __bch2_err_matches(int, int);
354
_bch2_err_matches(int err,int class)355 static inline bool _bch2_err_matches(int err, int class)
356 {
357 return err < 0 && __bch2_err_matches(err, class);
358 }
359
360 #define bch2_err_matches(_err, _class) \
361 ({ \
362 BUILD_BUG_ON(!__builtin_constant_p(_class)); \
363 unlikely(_bch2_err_matches(_err, _class)); \
364 })
365
366 int __bch2_err_class(int);
367
bch2_err_class(long err)368 static inline long bch2_err_class(long err)
369 {
370 return err < 0 ? __bch2_err_class(err) : err;
371 }
372
373 #define BLK_STS_REMOVED ((__force blk_status_t)128)
374
375 #include <linux/blk_types.h>
376 const char *bch2_blk_status_to_str(blk_status_t);
377
378 #endif /* _BCACHFES_ERRCODE_H */
379