diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-03-19 15:56:34 -0800 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-03-19 17:31:47 -0800 |
commit | 5ec39af8eaba49aee7bafa44c661da39e2f40dc3 (patch) | |
tree | 1fb1a981602cbf22c7d2b2dba1168c715d7cecb5 /libbcache/error.h | |
parent | bb1941de5378a7b8122d3575dcbc7d0aeb6326f0 (diff) |
Rename from bcache-tools to bcachefs-tools
Diffstat (limited to 'libbcache/error.h')
-rw-r--r-- | libbcache/error.h | 240 |
1 files changed, 0 insertions, 240 deletions
diff --git a/libbcache/error.h b/libbcache/error.h deleted file mode 100644 index 726b20d4..00000000 --- a/libbcache/error.h +++ /dev/null @@ -1,240 +0,0 @@ -#ifndef _BCACHE_ERROR_H -#define _BCACHE_ERROR_H - -#include <linux/printk.h> - -struct bch_dev; -struct bch_fs; - -/* - * XXX: separate out errors that indicate on disk data is inconsistent, and flag - * superblock as such - */ - -/* Error messages: */ - -/* - * Very fatal logic/inconsistency errors: these indicate that we've majorly - * screwed up at runtime, i.e. it's not likely that it was just caused by the - * data on disk being inconsistent. These BUG(): - * - * XXX: audit and convert to inconsistent() checks - */ - -#define bch_fs_bug(c, ...) \ -do { \ - bch_err(c, __VA_ARGS__); \ - BUG(); \ -} while (0) - -#define bch_fs_bug_on(cond, c, ...) \ -do { \ - if (cond) \ - bch_fs_bug(c, __VA_ARGS__); \ -} while (0) - -/* - * Inconsistency errors: The on disk data is inconsistent. If these occur during - * initial recovery, they don't indicate a bug in the running code - we walk all - * the metadata before modifying anything. If they occur at runtime, they - * indicate either a bug in the running code or (less likely) data is being - * silently corrupted under us. - * - * XXX: audit all inconsistent errors and make sure they're all recoverable, in - * BCH_ON_ERROR_CONTINUE mode - */ - -void bch_inconsistent_error(struct bch_fs *); - -#define bch_fs_inconsistent(c, ...) \ -do { \ - bch_err(c, __VA_ARGS__); \ - bch_inconsistent_error(c); \ -} while (0) - -#define bch_fs_inconsistent_on(cond, c, ...) \ -({ \ - int _ret = !!(cond); \ - \ - if (_ret) \ - bch_fs_inconsistent(c, __VA_ARGS__); \ - _ret; \ -}) - -/* - * Later we might want to mark only the particular device inconsistent, not the - * entire filesystem: - */ - -#define bch_dev_inconsistent(ca, ...) \ -do { \ - bch_err(ca, __VA_ARGS__); \ - bch_inconsistent_error((ca)->fs); \ -} while (0) - -#define bch_dev_inconsistent_on(cond, ca, ...) \ -({ \ - int _ret = !!(cond); \ - \ - if (_ret) \ - bch_dev_inconsistent(ca, __VA_ARGS__); \ - _ret; \ -}) - -/* - * Fsck errors: inconsistency errors we detect at mount time, and should ideally - * be able to repair: - */ - -enum { - BCH_FSCK_OK = 0, - BCH_FSCK_ERRORS_NOT_FIXED = 1, - BCH_FSCK_REPAIR_UNIMPLEMENTED = 2, - BCH_FSCK_REPAIR_IMPOSSIBLE = 3, - BCH_FSCK_UNKNOWN_VERSION = 4, -}; - -/* These macros return true if error should be fixed: */ - -/* XXX: mark in superblock that filesystem contains errors, if we ignore: */ - -#ifndef __fsck_err -#define __fsck_err(c, _can_fix, _can_ignore, _nofix_msg, msg, ...) \ -({ \ - bool _fix = false; \ - \ - if (_can_fix && (c)->opts.fix_errors) { \ - bch_err(c, msg ", fixing", ##__VA_ARGS__); \ - set_bit(BCH_FS_FSCK_FIXED_ERRORS, &(c)->flags); \ - _fix = true; \ - } else if (_can_ignore && \ - (c)->opts.errors == BCH_ON_ERROR_CONTINUE) { \ - bch_err(c, msg " (ignoring)", ##__VA_ARGS__); \ - } else { \ - bch_err(c, msg " ("_nofix_msg")", ##__VA_ARGS__); \ - ret = BCH_FSCK_ERRORS_NOT_FIXED; \ - goto fsck_err; \ - } \ - \ - BUG_ON(!_fix && !_can_ignore); \ - _fix; \ -}) -#endif - -#define __fsck_err_on(cond, c, _can_fix, _can_ignore, _nofix_msg, ...) \ - ((cond) ? __fsck_err(c, _can_fix, _can_ignore, \ - _nofix_msg, ##__VA_ARGS__) : false) - -#define unfixable_fsck_err_on(cond, c, ...) \ - __fsck_err_on(cond, c, false, true, "repair unimplemented", ##__VA_ARGS__) - -#define need_fsck_err_on(cond, c, ...) \ - __fsck_err_on(cond, c, false, true, "run fsck to correct", ##__VA_ARGS__) - -#define mustfix_fsck_err(c, ...) \ - __fsck_err(c, true, false, "not fixing", ##__VA_ARGS__) - -#define mustfix_fsck_err_on(cond, c, ...) \ - __fsck_err_on(cond, c, true, false, "not fixing", ##__VA_ARGS__) - -#define fsck_err_on(cond, c, ...) \ - __fsck_err_on(cond, c, true, true, "not fixing", ##__VA_ARGS__) - -/* - * Fatal errors: these don't indicate a bug, but we can't continue running in RW - * mode - pretty much just due to metadata IO errors: - */ - -void bch_fatal_error(struct bch_fs *); - -#define bch_fs_fatal_error(c, ...) \ -do { \ - bch_err(c, __VA_ARGS__); \ - bch_fatal_error(c); \ -} while (0) - -#define bch_fs_fatal_err_on(cond, c, ...) \ -({ \ - int _ret = !!(cond); \ - \ - if (_ret) \ - bch_fs_fatal_error(c, __VA_ARGS__); \ - _ret; \ -}) - -#define bch_dev_fatal_error(ca, ...) \ -do { \ - bch_err(ca, __VA_ARGS__); \ - bch_fatal_error(c); \ -} while (0) - -#define bch_dev_fatal_io_error(ca, fmt, ...) \ -do { \ - printk_ratelimited(KERN_ERR bch_fmt((ca)->fs, \ - "fatal IO error on %s for " fmt), \ - (ca)->name, ##__VA_ARGS__); \ - bch_fatal_error((ca)->fs); \ -} while (0) - -#define bch_dev_fatal_io_err_on(cond, ca, ...) \ -({ \ - int _ret = !!(cond); \ - \ - if (_ret) \ - bch_dev_fatal_io_error(ca, __VA_ARGS__); \ - _ret; \ -}) - -/* - * Nonfatal IO errors: either recoverable metadata IO (because we have - * replicas), or data IO - we need to log it and print out a message, but we - * don't (necessarily) want to shut down the fs: - */ - -void bch_account_io_completion(struct bch_dev *); -void bch_account_io_completion_time(struct bch_dev *, unsigned, int); - -void bch_nonfatal_io_error_work(struct work_struct *); - -/* Does the error handling without logging a message */ -void bch_nonfatal_io_error(struct bch_dev *); - -#if 0 -#define bch_fs_nonfatal_io_error(c, ...) \ -do { \ - bch_err(c, __VA_ARGS__); \ - bch_nonfatal_io_error(c); \ -} while (0) -#endif - -/* Logs message and handles the error: */ -#define bch_dev_nonfatal_io_error(ca, fmt, ...) \ -do { \ - printk_ratelimited(KERN_ERR bch_fmt((ca)->fs, \ - "IO error on %s for " fmt), \ - (ca)->name, ##__VA_ARGS__); \ - bch_nonfatal_io_error(ca); \ -} while (0) - -#define bch_dev_nonfatal_io_err_on(cond, ca, ...) \ -({ \ - bool _ret = (cond); \ - \ - if (_ret) \ - bch_dev_nonfatal_io_error(ca, __VA_ARGS__); \ - _ret; \ -}) - -/* kill? */ - -#define __bcache_io_error(c, fmt, ...) \ - printk_ratelimited(KERN_ERR bch_fmt(c, \ - "IO error: " fmt), ##__VA_ARGS__) - -#define bcache_io_error(c, bio, fmt, ...) \ -do { \ - __bcache_io_error(c, fmt, ##__VA_ARGS__); \ - (bio)->bi_error = -EIO; \ -} while (0) - -#endif /* _BCACHE_ERROR_H */ |