1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_ERRCODE_H
3 #define _BCACHEFS_ERRCODE_H
5 #define BCH_ERRCODES() \
6 x(ENOSPC, ENOSPC_disk_reservation) \
7 x(ENOSPC, ENOSPC_bucket_alloc) \
8 x(ENOSPC, ENOSPC_disk_label_add) \
9 x(ENOSPC, ENOSPC_stripe_create) \
10 x(ENOSPC, ENOSPC_stripe_reuse) \
11 x(ENOSPC, ENOSPC_inode_create) \
12 x(ENOSPC, ENOSPC_str_hash_create) \
13 x(ENOSPC, ENOSPC_snapshot_create) \
14 x(ENOSPC, ENOSPC_subvolume_create) \
15 x(ENOSPC, ENOSPC_sb) \
16 x(ENOSPC, ENOSPC_sb_journal) \
17 x(ENOSPC, ENOSPC_sb_quota) \
18 x(ENOSPC, ENOSPC_sb_replicas) \
19 x(ENOSPC, ENOSPC_sb_members) \
20 x(0, open_buckets_empty) \
21 x(0, freelist_empty) \
22 x(BCH_ERR_freelist_empty, no_buckets_found) \
23 x(0, transaction_restart) \
24 x(BCH_ERR_transaction_restart, transaction_restart_fault_inject) \
25 x(BCH_ERR_transaction_restart, transaction_restart_relock) \
26 x(BCH_ERR_transaction_restart, transaction_restart_relock_path) \
27 x(BCH_ERR_transaction_restart, transaction_restart_relock_path_intent) \
28 x(BCH_ERR_transaction_restart, transaction_restart_relock_after_fill) \
29 x(BCH_ERR_transaction_restart, transaction_restart_too_many_iters) \
30 x(BCH_ERR_transaction_restart, transaction_restart_lock_node_reused) \
31 x(BCH_ERR_transaction_restart, transaction_restart_fill_relock) \
32 x(BCH_ERR_transaction_restart, transaction_restart_fill_mem_alloc_fail)\
33 x(BCH_ERR_transaction_restart, transaction_restart_mem_realloced) \
34 x(BCH_ERR_transaction_restart, transaction_restart_in_traverse_all) \
35 x(BCH_ERR_transaction_restart, transaction_restart_would_deadlock) \
36 x(BCH_ERR_transaction_restart, transaction_restart_would_deadlock_write)\
37 x(BCH_ERR_transaction_restart, transaction_restart_deadlock_recursion_limit)\
38 x(BCH_ERR_transaction_restart, transaction_restart_upgrade) \
39 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_upgrade) \
40 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_fill) \
41 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_raced) \
42 x(BCH_ERR_transaction_restart, transaction_restart_key_cache_realloced)\
43 x(BCH_ERR_transaction_restart, transaction_restart_journal_preres_get) \
44 x(BCH_ERR_transaction_restart, transaction_restart_split_race) \
45 x(BCH_ERR_transaction_restart, transaction_restart_write_buffer_flush) \
46 x(BCH_ERR_transaction_restart, transaction_restart_nested) \
48 x(BCH_ERR_no_btree_node, no_btree_node_relock) \
49 x(BCH_ERR_no_btree_node, no_btree_node_upgrade) \
50 x(BCH_ERR_no_btree_node, no_btree_node_drop) \
51 x(BCH_ERR_no_btree_node, no_btree_node_lock_root) \
52 x(BCH_ERR_no_btree_node, no_btree_node_up) \
53 x(BCH_ERR_no_btree_node, no_btree_node_down) \
54 x(BCH_ERR_no_btree_node, no_btree_node_init) \
55 x(BCH_ERR_no_btree_node, no_btree_node_cached) \
56 x(BCH_ERR_no_btree_node, no_btree_node_srcu_reset) \
57 x(0, btree_insert_fail) \
58 x(BCH_ERR_btree_insert_fail, btree_insert_btree_node_full) \
59 x(BCH_ERR_btree_insert_fail, btree_insert_need_mark_replicas) \
60 x(BCH_ERR_btree_insert_fail, btree_insert_need_journal_res) \
61 x(BCH_ERR_btree_insert_fail, btree_insert_need_journal_reclaim) \
62 x(BCH_ERR_btree_insert_fail, btree_insert_need_flush_buffer) \
63 x(0, backpointer_to_overwritten_btree_node) \
64 x(0, lock_fail_root_changed) \
65 x(0, journal_reclaim_would_deadlock) \
67 x(BCH_ERR_fsck, fsck_fix) \
68 x(BCH_ERR_fsck, fsck_ignore) \
69 x(BCH_ERR_fsck, fsck_errors_not_fixed) \
70 x(BCH_ERR_fsck, fsck_repair_unimplemented) \
71 x(BCH_ERR_fsck, fsck_repair_impossible) \
72 x(0, need_snapshot_cleanup) \
73 x(0, need_topology_repair) \
74 x(0, unwritten_extent_update) \
75 x(EINVAL, device_state_not_allowed) \
76 x(EINVAL, member_info_missing) \
77 x(EINVAL, mismatched_block_size) \
78 x(EINVAL, block_size_too_small) \
79 x(EINVAL, bucket_size_too_small) \
80 x(EINVAL, device_size_too_small) \
81 x(EINVAL, device_not_a_member_of_filesystem) \
82 x(EINVAL, device_has_been_removed) \
83 x(EINVAL, device_already_online) \
84 x(EINVAL, insufficient_devices_to_start) \
86 x(EROFS, erofs_trans_commit) \
87 x(EROFS, erofs_no_writes) \
88 x(EROFS, erofs_journal_err) \
89 x(EROFS, erofs_sb_err) \
90 x(EROFS, insufficient_devices) \
91 x(0, operation_blocked) \
92 x(BCH_ERR_operation_blocked, btree_cache_cannibalize_lock_blocked) \
93 x(BCH_ERR_operation_blocked, journal_res_get_blocked) \
94 x(BCH_ERR_operation_blocked, journal_preres_get_blocked) \
95 x(BCH_ERR_operation_blocked, bucket_alloc_blocked) \
96 x(BCH_ERR_invalid, invalid_sb) \
97 x(BCH_ERR_invalid_sb, invalid_sb_magic) \
98 x(BCH_ERR_invalid_sb, invalid_sb_version) \
99 x(BCH_ERR_invalid_sb, invalid_sb_features) \
100 x(BCH_ERR_invalid_sb, invalid_sb_too_big) \
101 x(BCH_ERR_invalid_sb, invalid_sb_csum_type) \
102 x(BCH_ERR_invalid_sb, invalid_sb_csum) \
103 x(BCH_ERR_invalid_sb, invalid_sb_block_size) \
104 x(BCH_ERR_invalid_sb, invalid_sb_uuid) \
105 x(BCH_ERR_invalid_sb, invalid_sb_too_many_members) \
106 x(BCH_ERR_invalid_sb, invalid_sb_dev_idx) \
107 x(BCH_ERR_invalid_sb, invalid_sb_time_precision) \
108 x(BCH_ERR_invalid_sb, invalid_sb_field_size) \
109 x(BCH_ERR_invalid_sb, invalid_sb_layout) \
110 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_type) \
111 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_nr_superblocks) \
112 x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_superblocks_overlap) \
113 x(BCH_ERR_invalid_sb, invalid_sb_members_missing) \
114 x(BCH_ERR_invalid_sb, invalid_sb_members) \
115 x(BCH_ERR_invalid_sb, invalid_sb_disk_groups) \
116 x(BCH_ERR_invalid_sb, invalid_sb_replicas) \
117 x(BCH_ERR_invalid_sb, invalid_sb_journal) \
118 x(BCH_ERR_invalid_sb, invalid_sb_journal_seq_blacklist) \
119 x(BCH_ERR_invalid_sb, invalid_sb_crypt) \
120 x(BCH_ERR_invalid_sb, invalid_sb_clean) \
121 x(BCH_ERR_invalid_sb, invalid_sb_quota) \
122 x(BCH_ERR_invalid, invalid_bkey) \
123 x(BCH_ERR_operation_blocked, nocow_lock_blocked) \
126 BCH_ERR_START = 2048,
127 #define x(class, err) BCH_ERR_##err,
133 const char *bch2_err_str(int);
134 bool __bch2_err_matches(int, int);
136 static inline bool _bch2_err_matches(int err, int class)
138 return err && __bch2_err_matches(err, class);
141 #define bch2_err_matches(_err, _class) \
143 BUILD_BUG_ON(!__builtin_constant_p(_class)); \
144 _bch2_err_matches(_err, _class); \
147 int __bch2_err_class(int);
149 static inline long bch2_err_class(long err)
151 return err < 0 ? __bch2_err_class(err) : err;
154 #endif /* _BCACHFES_ERRCODE_H */