errcode.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _BCACHEFS_ERRCODE_H
  3. #define _BCACHEFS_ERRCODE_H
  4. #define BCH_ERRCODES() \
  5. x(ERANGE, ERANGE_option_too_small) \
  6. x(ERANGE, ERANGE_option_too_big) \
  7. x(EINVAL, mount_option) \
  8. x(BCH_ERR_mount_option, option_name) \
  9. x(BCH_ERR_mount_option, option_value) \
  10. x(BCH_ERR_mount_option, option_not_bool) \
  11. x(ENOMEM, ENOMEM_stripe_buf) \
  12. x(ENOMEM, ENOMEM_replicas_table) \
  13. x(ENOMEM, ENOMEM_cpu_replicas) \
  14. x(ENOMEM, ENOMEM_replicas_gc) \
  15. x(ENOMEM, ENOMEM_disk_groups_validate) \
  16. x(ENOMEM, ENOMEM_disk_groups_to_cpu) \
  17. x(ENOMEM, ENOMEM_mark_snapshot) \
  18. x(ENOMEM, ENOMEM_mark_stripe) \
  19. x(ENOMEM, ENOMEM_mark_stripe_ptr) \
  20. x(ENOMEM, ENOMEM_btree_key_cache_create) \
  21. x(ENOMEM, ENOMEM_btree_key_cache_fill) \
  22. x(ENOMEM, ENOMEM_btree_key_cache_insert) \
  23. x(ENOMEM, ENOMEM_trans_kmalloc) \
  24. x(ENOMEM, ENOMEM_trans_log_msg) \
  25. x(ENOMEM, ENOMEM_do_encrypt) \
  26. x(ENOMEM, ENOMEM_ec_read_extent) \
  27. x(ENOMEM, ENOMEM_ec_stripe_mem_alloc) \
  28. x(ENOMEM, ENOMEM_ec_new_stripe_alloc) \
  29. x(ENOMEM, ENOMEM_fs_btree_cache_init) \
  30. x(ENOMEM, ENOMEM_fs_btree_key_cache_init) \
  31. x(ENOMEM, ENOMEM_fs_counters_init) \
  32. x(ENOMEM, ENOMEM_fs_btree_write_buffer_init) \
  33. x(ENOMEM, ENOMEM_io_clock_init) \
  34. x(ENOMEM, ENOMEM_blacklist_table_init) \
  35. x(ENOMEM, ENOMEM_sb_realloc_injected) \
  36. x(ENOMEM, ENOMEM_sb_bio_realloc) \
  37. x(ENOMEM, ENOMEM_sb_buf_realloc) \
  38. x(ENOMEM, ENOMEM_sb_journal_validate) \
  39. x(ENOMEM, ENOMEM_sb_journal_v2_validate) \
  40. x(ENOMEM, ENOMEM_journal_entry_add) \
  41. x(ENOMEM, ENOMEM_journal_read_buf_realloc) \
  42. x(ENOMEM, ENOMEM_btree_interior_update_worker_init)\
  43. x(ENOMEM, ENOMEM_btree_interior_update_pool_init) \
  44. x(ENOMEM, ENOMEM_bio_read_init) \
  45. x(ENOMEM, ENOMEM_bio_read_split_init) \
  46. x(ENOMEM, ENOMEM_bio_write_init) \
  47. x(ENOMEM, ENOMEM_bio_bounce_pages_init) \
  48. x(ENOMEM, ENOMEM_writepage_bioset_init) \
  49. x(ENOMEM, ENOMEM_dio_read_bioset_init) \
  50. x(ENOMEM, ENOMEM_dio_write_bioset_init) \
  51. x(ENOMEM, ENOMEM_nocow_flush_bioset_init) \
  52. x(ENOMEM, ENOMEM_promote_table_init) \
  53. x(ENOMEM, ENOMEM_compression_bounce_read_init) \
  54. x(ENOMEM, ENOMEM_compression_bounce_write_init) \
  55. x(ENOMEM, ENOMEM_compression_workspace_init) \
  56. x(ENOMEM, ENOMEM_decompression_workspace_init) \
  57. x(ENOMEM, ENOMEM_bucket_gens) \
  58. x(ENOMEM, ENOMEM_buckets_nouse) \
  59. x(ENOMEM, ENOMEM_usage_init) \
  60. x(ENOMEM, ENOMEM_btree_node_read_all_replicas) \
  61. x(ENOMEM, ENOMEM_btree_node_reclaim) \
  62. x(ENOMEM, ENOMEM_btree_node_mem_alloc) \
  63. x(ENOMEM, ENOMEM_btree_cache_cannibalize_lock) \
  64. x(ENOMEM, ENOMEM_buckets_waiting_for_journal_init)\
  65. x(ENOMEM, ENOMEM_buckets_waiting_for_journal_set) \
  66. x(ENOMEM, ENOMEM_set_nr_journal_buckets) \
  67. x(ENOMEM, ENOMEM_dev_journal_init) \
  68. x(ENOMEM, ENOMEM_journal_pin_fifo) \
  69. x(ENOMEM, ENOMEM_journal_buf) \
  70. x(ENOMEM, ENOMEM_gc_start) \
  71. x(ENOMEM, ENOMEM_gc_alloc_start) \
  72. x(ENOMEM, ENOMEM_gc_reflink_start) \
  73. x(ENOMEM, ENOMEM_gc_gens) \
  74. x(ENOMEM, ENOMEM_gc_repair_key) \
  75. x(ENOMEM, ENOMEM_fsck_extent_ends_at) \
  76. x(ENOMEM, ENOMEM_fsck_add_nlink) \
  77. x(ENOMEM, ENOMEM_journal_key_insert) \
  78. x(ENOMEM, ENOMEM_journal_keys_sort) \
  79. x(ENOMEM, ENOMEM_read_superblock_clean) \
  80. x(ENOMEM, ENOMEM_fs_alloc) \
  81. x(ENOMEM, ENOMEM_fs_name_alloc) \
  82. x(ENOMEM, ENOMEM_fs_other_alloc) \
  83. x(ENOMEM, ENOMEM_dev_alloc) \
  84. x(ENOMEM, ENOMEM_disk_accounting) \
  85. x(ENOMEM, ENOMEM_stripe_head_alloc) \
  86. x(ENOMEM, ENOMEM_journal_read_bucket) \
  87. x(ENOSPC, ENOSPC_disk_reservation) \
  88. x(ENOSPC, ENOSPC_bucket_alloc) \
  89. x(ENOSPC, ENOSPC_disk_label_add) \
  90. x(ENOSPC, ENOSPC_stripe_create) \
  91. x(ENOSPC, ENOSPC_inode_create) \
  92. x(ENOSPC, ENOSPC_str_hash_create) \
  93. x(ENOSPC, ENOSPC_snapshot_create) \
  94. x(ENOSPC, ENOSPC_subvolume_create) \
  95. x(ENOSPC, ENOSPC_sb) \
  96. x(ENOSPC, ENOSPC_sb_journal) \
  97. x(ENOSPC, ENOSPC_sb_journal_seq_blacklist) \
  98. x(ENOSPC, ENOSPC_sb_quota) \
  99. x(ENOSPC, ENOSPC_sb_replicas) \
  100. x(ENOSPC, ENOSPC_sb_members) \
  101. x(ENOSPC, ENOSPC_sb_members_v2) \
  102. x(ENOSPC, ENOSPC_sb_crypt) \
  103. x(ENOSPC, ENOSPC_sb_downgrade) \
  104. x(ENOSPC, ENOSPC_btree_slot) \
  105. x(ENOSPC, ENOSPC_snapshot_tree) \
  106. x(ENOENT, ENOENT_bkey_type_mismatch) \
  107. x(ENOENT, ENOENT_str_hash_lookup) \
  108. x(ENOENT, ENOENT_str_hash_set_must_replace) \
  109. x(ENOENT, ENOENT_inode) \
  110. x(ENOENT, ENOENT_not_subvol) \
  111. x(ENOENT, ENOENT_not_directory) \
  112. x(ENOENT, ENOENT_directory_dead) \
  113. x(ENOENT, ENOENT_subvolume) \
  114. x(ENOENT, ENOENT_snapshot_tree) \
  115. x(ENOENT, ENOENT_dirent_doesnt_match_inode) \
  116. x(ENOENT, ENOENT_dev_not_found) \
  117. x(ENOENT, ENOENT_dev_idx_not_found) \
  118. x(ENOTEMPTY, ENOTEMPTY_dir_not_empty) \
  119. x(ENOTEMPTY, ENOTEMPTY_subvol_not_empty) \
  120. x(EEXIST, EEXIST_str_hash_set) \
  121. x(EEXIST, EEXIST_discard_in_flight_add) \
  122. x(EEXIST, EEXIST_subvolume_create) \
  123. x(ENOSPC, open_buckets_empty) \
  124. x(ENOSPC, freelist_empty) \
  125. x(BCH_ERR_freelist_empty, no_buckets_found) \
  126. x(0, transaction_restart) \
  127. x(BCH_ERR_transaction_restart, transaction_restart_fault_inject) \
  128. x(BCH_ERR_transaction_restart, transaction_restart_relock) \
  129. x(BCH_ERR_transaction_restart, transaction_restart_relock_path) \
  130. x(BCH_ERR_transaction_restart, transaction_restart_relock_path_intent) \
  131. x(BCH_ERR_transaction_restart, transaction_restart_relock_after_fill) \
  132. x(BCH_ERR_transaction_restart, transaction_restart_too_many_iters) \
  133. x(BCH_ERR_transaction_restart, transaction_restart_lock_node_reused) \
  134. x(BCH_ERR_transaction_restart, transaction_restart_fill_relock) \
  135. x(BCH_ERR_transaction_restart, transaction_restart_fill_mem_alloc_fail)\
  136. x(BCH_ERR_transaction_restart, transaction_restart_mem_realloced) \
  137. x(BCH_ERR_transaction_restart, transaction_restart_in_traverse_all) \
  138. x(BCH_ERR_transaction_restart, transaction_restart_would_deadlock) \
  139. x(BCH_ERR_transaction_restart, transaction_restart_would_deadlock_write)\
  140. x(BCH_ERR_transaction_restart, transaction_restart_deadlock_recursion_limit)\
  141. x(BCH_ERR_transaction_restart, transaction_restart_upgrade) \
  142. x(BCH_ERR_transaction_restart, transaction_restart_key_cache_upgrade) \
  143. x(BCH_ERR_transaction_restart, transaction_restart_key_cache_fill) \
  144. x(BCH_ERR_transaction_restart, transaction_restart_key_cache_raced) \
  145. x(BCH_ERR_transaction_restart, transaction_restart_key_cache_realloced)\
  146. x(BCH_ERR_transaction_restart, transaction_restart_journal_preres_get) \
  147. x(BCH_ERR_transaction_restart, transaction_restart_split_race) \
  148. x(BCH_ERR_transaction_restart, transaction_restart_write_buffer_flush) \
  149. x(BCH_ERR_transaction_restart, transaction_restart_nested) \
  150. x(0, no_btree_node) \
  151. x(BCH_ERR_no_btree_node, no_btree_node_relock) \
  152. x(BCH_ERR_no_btree_node, no_btree_node_upgrade) \
  153. x(BCH_ERR_no_btree_node, no_btree_node_drop) \
  154. x(BCH_ERR_no_btree_node, no_btree_node_lock_root) \
  155. x(BCH_ERR_no_btree_node, no_btree_node_up) \
  156. x(BCH_ERR_no_btree_node, no_btree_node_down) \
  157. x(BCH_ERR_no_btree_node, no_btree_node_init) \
  158. x(BCH_ERR_no_btree_node, no_btree_node_cached) \
  159. x(BCH_ERR_no_btree_node, no_btree_node_srcu_reset) \
  160. x(0, btree_insert_fail) \
  161. x(BCH_ERR_btree_insert_fail, btree_insert_btree_node_full) \
  162. x(BCH_ERR_btree_insert_fail, btree_insert_need_mark_replicas) \
  163. x(BCH_ERR_btree_insert_fail, btree_insert_need_journal_res) \
  164. x(BCH_ERR_btree_insert_fail, btree_insert_need_journal_reclaim) \
  165. x(0, backpointer_to_overwritten_btree_node) \
  166. x(0, lock_fail_root_changed) \
  167. x(0, journal_reclaim_would_deadlock) \
  168. x(EINVAL, fsck) \
  169. x(BCH_ERR_fsck, fsck_fix) \
  170. x(BCH_ERR_fsck, fsck_delete_bkey) \
  171. x(BCH_ERR_fsck, fsck_ignore) \
  172. x(BCH_ERR_fsck, fsck_errors_not_fixed) \
  173. x(BCH_ERR_fsck, fsck_repair_unimplemented) \
  174. x(BCH_ERR_fsck, fsck_repair_impossible) \
  175. x(0, restart_recovery) \
  176. x(0, data_update_done) \
  177. x(EINVAL, device_state_not_allowed) \
  178. x(EINVAL, member_info_missing) \
  179. x(EINVAL, mismatched_block_size) \
  180. x(EINVAL, block_size_too_small) \
  181. x(EINVAL, bucket_size_too_small) \
  182. x(EINVAL, device_size_too_small) \
  183. x(EINVAL, device_size_too_big) \
  184. x(EINVAL, device_not_a_member_of_filesystem) \
  185. x(EINVAL, device_has_been_removed) \
  186. x(EINVAL, device_splitbrain) \
  187. x(EINVAL, device_already_online) \
  188. x(EINVAL, insufficient_devices_to_start) \
  189. x(EINVAL, invalid) \
  190. x(EINVAL, internal_fsck_err) \
  191. x(EINVAL, opt_parse_error) \
  192. x(EINVAL, remove_with_metadata_missing_unimplemented)\
  193. x(EINVAL, remove_would_lose_data) \
  194. x(EINVAL, btree_iter_with_journal_not_supported) \
  195. x(EROFS, erofs_trans_commit) \
  196. x(EROFS, erofs_no_writes) \
  197. x(EROFS, erofs_journal_err) \
  198. x(EROFS, erofs_sb_err) \
  199. x(EROFS, erofs_unfixed_errors) \
  200. x(EROFS, erofs_norecovery) \
  201. x(EROFS, erofs_nochanges) \
  202. x(EROFS, insufficient_devices) \
  203. x(0, operation_blocked) \
  204. x(BCH_ERR_operation_blocked, btree_cache_cannibalize_lock_blocked) \
  205. x(BCH_ERR_operation_blocked, journal_res_get_blocked) \
  206. x(BCH_ERR_operation_blocked, journal_preres_get_blocked) \
  207. x(BCH_ERR_operation_blocked, bucket_alloc_blocked) \
  208. x(BCH_ERR_operation_blocked, stripe_alloc_blocked) \
  209. x(BCH_ERR_invalid, invalid_sb) \
  210. x(BCH_ERR_invalid_sb, invalid_sb_magic) \
  211. x(BCH_ERR_invalid_sb, invalid_sb_version) \
  212. x(BCH_ERR_invalid_sb, invalid_sb_features) \
  213. x(BCH_ERR_invalid_sb, invalid_sb_too_big) \
  214. x(BCH_ERR_invalid_sb, invalid_sb_csum_type) \
  215. x(BCH_ERR_invalid_sb, invalid_sb_csum) \
  216. x(BCH_ERR_invalid_sb, invalid_sb_block_size) \
  217. x(BCH_ERR_invalid_sb, invalid_sb_uuid) \
  218. x(BCH_ERR_invalid_sb, invalid_sb_too_many_members) \
  219. x(BCH_ERR_invalid_sb, invalid_sb_dev_idx) \
  220. x(BCH_ERR_invalid_sb, invalid_sb_time_precision) \
  221. x(BCH_ERR_invalid_sb, invalid_sb_field_size) \
  222. x(BCH_ERR_invalid_sb, invalid_sb_layout) \
  223. x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_type) \
  224. x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_nr_superblocks) \
  225. x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_superblocks_overlap) \
  226. x(BCH_ERR_invalid_sb_layout, invalid_sb_layout_sb_max_size_bits) \
  227. x(BCH_ERR_invalid_sb, invalid_sb_members_missing) \
  228. x(BCH_ERR_invalid_sb, invalid_sb_members) \
  229. x(BCH_ERR_invalid_sb, invalid_sb_disk_groups) \
  230. x(BCH_ERR_invalid_sb, invalid_sb_replicas) \
  231. x(BCH_ERR_invalid_sb, invalid_replicas_entry) \
  232. x(BCH_ERR_invalid_sb, invalid_sb_journal) \
  233. x(BCH_ERR_invalid_sb, invalid_sb_journal_seq_blacklist) \
  234. x(BCH_ERR_invalid_sb, invalid_sb_crypt) \
  235. x(BCH_ERR_invalid_sb, invalid_sb_clean) \
  236. x(BCH_ERR_invalid_sb, invalid_sb_quota) \
  237. x(BCH_ERR_invalid_sb, invalid_sb_errors) \
  238. x(BCH_ERR_invalid_sb, invalid_sb_opt_compression) \
  239. x(BCH_ERR_invalid_sb, invalid_sb_ext) \
  240. x(BCH_ERR_invalid_sb, invalid_sb_downgrade) \
  241. x(BCH_ERR_invalid, invalid_bkey) \
  242. x(BCH_ERR_operation_blocked, nocow_lock_blocked) \
  243. x(EIO, btree_node_read_err) \
  244. x(EIO, sb_not_downgraded) \
  245. x(EIO, btree_node_write_all_failed) \
  246. x(EIO, btree_node_read_error) \
  247. x(EIO, btree_node_read_validate_error) \
  248. x(EIO, btree_need_topology_repair) \
  249. x(EIO, bucket_ref_update) \
  250. x(EIO, trigger_pointer) \
  251. x(EIO, trigger_stripe_pointer) \
  252. x(EIO, metadata_bucket_inconsistency) \
  253. x(EIO, mark_stripe) \
  254. x(EIO, stripe_reconstruct) \
  255. x(EIO, key_type_error) \
  256. x(EIO, no_device_to_read_from) \
  257. x(EIO, missing_indirect_extent) \
  258. x(EIO, invalidate_stripe_to_dev) \
  259. x(BCH_ERR_btree_node_read_err, btree_node_read_err_fixable) \
  260. x(BCH_ERR_btree_node_read_err, btree_node_read_err_want_retry) \
  261. x(BCH_ERR_btree_node_read_err, btree_node_read_err_must_retry) \
  262. x(BCH_ERR_btree_node_read_err, btree_node_read_err_bad_node) \
  263. x(BCH_ERR_btree_node_read_err, btree_node_read_err_incompatible) \
  264. x(0, nopromote) \
  265. x(BCH_ERR_nopromote, nopromote_may_not) \
  266. x(BCH_ERR_nopromote, nopromote_already_promoted) \
  267. x(BCH_ERR_nopromote, nopromote_unwritten) \
  268. x(BCH_ERR_nopromote, nopromote_congested) \
  269. x(BCH_ERR_nopromote, nopromote_in_flight) \
  270. x(BCH_ERR_nopromote, nopromote_no_writes) \
  271. x(BCH_ERR_nopromote, nopromote_enomem) \
  272. x(0, invalid_snapshot_node) \
  273. x(0, option_needs_open_fs) \
  274. x(0, remove_disk_accounting_entry)
  275. enum bch_errcode {
  276. BCH_ERR_START = 2048,
  277. #define x(class, err) BCH_ERR_##err,
  278. BCH_ERRCODES()
  279. #undef x
  280. BCH_ERR_MAX
  281. };
  282. const char *bch2_err_str(int);
  283. bool __bch2_err_matches(int, int);
  284. static inline bool _bch2_err_matches(int err, int class)
  285. {
  286. return err < 0 && __bch2_err_matches(err, class);
  287. }
  288. #define bch2_err_matches(_err, _class) \
  289. ({ \
  290. BUILD_BUG_ON(!__builtin_constant_p(_class)); \
  291. unlikely(_bch2_err_matches(_err, _class)); \
  292. })
  293. int __bch2_err_class(int);
  294. static inline long bch2_err_class(long err)
  295. {
  296. return err < 0 ? __bch2_err_class(err) : err;
  297. }
  298. #define BLK_STS_REMOVED ((__force blk_status_t)128)
  299. const char *bch2_blk_status_to_str(blk_status_t);
  300. #endif /* _BCACHFES_ERRCODE_H */