]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/errcode.h
4942c367dac9ef23d998b1263bff9edcccc84fdb
[bcachefs-tools-debian] / libbcachefs / errcode.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _BCACHEFS_ERRCODE_H
3 #define _BCACHEFS_ERRCODE_H
4
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,                            insufficient_devices)                   \
24         x(0,                            transaction_restart)                    \
25         x(BCH_ERR_transaction_restart,  transaction_restart_fault_inject)       \
26         x(BCH_ERR_transaction_restart,  transaction_restart_relock)             \
27         x(BCH_ERR_transaction_restart,  transaction_restart_relock_path)        \
28         x(BCH_ERR_transaction_restart,  transaction_restart_relock_path_intent) \
29         x(BCH_ERR_transaction_restart,  transaction_restart_relock_after_fill)  \
30         x(BCH_ERR_transaction_restart,  transaction_restart_too_many_iters)     \
31         x(BCH_ERR_transaction_restart,  transaction_restart_lock_node_reused)   \
32         x(BCH_ERR_transaction_restart,  transaction_restart_fill_relock)        \
33         x(BCH_ERR_transaction_restart,  transaction_restart_fill_mem_alloc_fail)\
34         x(BCH_ERR_transaction_restart,  transaction_restart_mem_realloced)      \
35         x(BCH_ERR_transaction_restart,  transaction_restart_in_traverse_all)    \
36         x(BCH_ERR_transaction_restart,  transaction_restart_would_deadlock)     \
37         x(BCH_ERR_transaction_restart,  transaction_restart_would_deadlock_write)\
38         x(BCH_ERR_transaction_restart,  transaction_restart_deadlock_recursion_limit)\
39         x(BCH_ERR_transaction_restart,  transaction_restart_upgrade)            \
40         x(BCH_ERR_transaction_restart,  transaction_restart_key_cache_upgrade)  \
41         x(BCH_ERR_transaction_restart,  transaction_restart_key_cache_fill)     \
42         x(BCH_ERR_transaction_restart,  transaction_restart_key_cache_raced)    \
43         x(BCH_ERR_transaction_restart,  transaction_restart_key_cache_realloced)\
44         x(BCH_ERR_transaction_restart,  transaction_restart_journal_preres_get) \
45         x(BCH_ERR_transaction_restart,  transaction_restart_split_race)         \
46         x(BCH_ERR_transaction_restart,  transaction_restart_nested)             \
47         x(0,                            no_btree_node)                          \
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(0,                            backpointer_to_overwritten_btree_node)  \
57         x(0,                            lock_fail_root_changed)                 \
58         x(0,                            journal_reclaim_would_deadlock)         \
59         x(0,                            fsck)                                   \
60         x(BCH_ERR_fsck,                 fsck_fix)                               \
61         x(BCH_ERR_fsck,                 fsck_ignore)                            \
62         x(BCH_ERR_fsck,                 fsck_errors_not_fixed)                  \
63         x(BCH_ERR_fsck,                 fsck_repair_unimplemented)              \
64         x(BCH_ERR_fsck,                 fsck_repair_impossible)                 \
65         x(0,                            need_snapshot_cleanup)                  \
66         x(0,                            need_topology_repair)                   \
67         x(0,                            unwritten_extent_update)                \
68         x(EINVAL,                       device_state_not_allowed)               \
69         x(EINVAL,                       member_info_missing)                    \
70         x(EINVAL,                       mismatched_block_size)                  \
71         x(EINVAL,                       block_size_too_small)                   \
72         x(EINVAL,                       bucket_size_too_small)                  \
73         x(EINVAL,                       device_size_too_small)                  \
74         x(EINVAL,                       device_not_a_member_of_filesystem)      \
75         x(EINVAL,                       device_has_been_removed)                \
76         x(EINVAL,                       device_already_online)                  \
77         x(EINVAL,                       insufficient_devices_to_start)          \
78         x(EINVAL,                       invalid)                                \
79         x(BCH_ERR_invalid,              invalid_sb)                             \
80         x(BCH_ERR_invalid_sb,           invalid_sb_magic)                       \
81         x(BCH_ERR_invalid_sb,           invalid_sb_version)                     \
82         x(BCH_ERR_invalid_sb,           invalid_sb_features)                    \
83         x(BCH_ERR_invalid_sb,           invalid_sb_too_big)                     \
84         x(BCH_ERR_invalid_sb,           invalid_sb_csum_type)                   \
85         x(BCH_ERR_invalid_sb,           invalid_sb_csum)                        \
86         x(BCH_ERR_invalid_sb,           invalid_sb_block_size)                  \
87         x(BCH_ERR_invalid_sb,           invalid_sb_uuid)                        \
88         x(BCH_ERR_invalid_sb,           invalid_sb_too_many_members)            \
89         x(BCH_ERR_invalid_sb,           invalid_sb_dev_idx)                     \
90         x(BCH_ERR_invalid_sb,           invalid_sb_time_precision)              \
91         x(BCH_ERR_invalid_sb,           invalid_sb_field_size)                  \
92         x(BCH_ERR_invalid_sb,           invalid_sb_layout)                      \
93         x(BCH_ERR_invalid_sb_layout,    invalid_sb_layout_type)                 \
94         x(BCH_ERR_invalid_sb_layout,    invalid_sb_layout_nr_superblocks)       \
95         x(BCH_ERR_invalid_sb_layout,    invalid_sb_layout_superblocks_overlap)  \
96         x(BCH_ERR_invalid_sb,           invalid_sb_members_missing)             \
97         x(BCH_ERR_invalid_sb,           invalid_sb_members)                     \
98         x(BCH_ERR_invalid_sb,           invalid_sb_disk_groups)                 \
99         x(BCH_ERR_invalid_sb,           invalid_sb_replicas)                    \
100         x(BCH_ERR_invalid_sb,           invalid_sb_journal)                     \
101         x(BCH_ERR_invalid_sb,           invalid_sb_journal_seq_blacklist)       \
102         x(BCH_ERR_invalid_sb,           invalid_sb_crypt)                       \
103         x(BCH_ERR_invalid_sb,           invalid_sb_clean)                       \
104         x(BCH_ERR_invalid_sb,           invalid_sb_quota)                       \
105         x(BCH_ERR_invalid,              invalid_bkey)                           \
106
107 enum bch_errcode {
108         BCH_ERR_START           = 2048,
109 #define x(class, err) BCH_ERR_##err,
110         BCH_ERRCODES()
111 #undef x
112         BCH_ERR_MAX
113 };
114
115 const char *bch2_err_str(int);
116 bool __bch2_err_matches(int, int);
117
118 static inline bool _bch2_err_matches(int err, int class)
119 {
120         return err && __bch2_err_matches(err, class);
121 }
122
123 #define bch2_err_matches(_err, _class)                  \
124 ({                                                      \
125         BUILD_BUG_ON(!__builtin_constant_p(_class));    \
126         _bch2_err_matches(_err, _class);                \
127 })
128
129 int __bch2_err_class(int);
130
131 static inline long bch2_err_class(long err)
132 {
133         return err < 0 ? __bch2_err_class(err) : err;
134 }
135
136 #endif /* _BCACHFES_ERRCODE_H */