#include #include #include "libbcache.h" #include "tools-util.h" #define bch_fmt(_c, fmt) fmt "\n" enum fsck_err_opts fsck_err_opt; /* Returns true if error should be fixed: */ /* XXX: flag if we ignore errors */ /* * If it's an error that we can't ignore, and we're running non * interactively - return true and have the error fixed so that we don't have to * bail out and stop the fsck early, so that the user can see all the errors * present: */ #define __fsck_err(c, _can_fix, _can_ignore, _nofix_msg, msg, ...) \ ({ \ bool _fix = false; \ \ if (_can_fix) { \ switch (fsck_err_opt) { \ case FSCK_ERR_ASK: \ printf(msg ": fix?", ##__VA_ARGS__); \ _fix = ask_yn(); \ \ break; \ case FSCK_ERR_YES: \ bch_err(c, msg ", fixing", ##__VA_ARGS__); \ _fix = true; \ break; \ case FSCK_ERR_NO: \ bch_err(c, msg, ##__VA_ARGS__); \ _fix = false; \ break; \ } \ } else if (_can_ignore) { \ bch_err(c, msg, ##__VA_ARGS__); \ } \ \ if (_can_fix && !_can_ignore && fsck_err_opt == FSCK_ERR_NO) \ _fix = true; \ \ if (!_fix && !_can_ignore) { \ printf("Fatal filesystem inconsistency, halting\n"); \ ret = BCH_FSCK_ERRORS_NOT_FIXED; \ goto fsck_err; \ } \ \ _fix; \ }) //#include "acl.c" #include "alloc.c" #include "bkey.c" #include "bkey_methods.c" //#include "blockdev.c" #include "bset.c" #include "btree_cache.c" #include "btree_gc.c" #include "btree_io.c" #include "btree_iter.c" #include "btree_update.c" #include "buckets.c" //#include "chardev.c" #include "checksum.c" #include "clock.c" #include "closure.c" #include "compress.c" #include "debug.c" #include "dirent.c" #include "error.c" #include "extents.c" //#include "fs.c" #include "fs-gc.c" //#include "fs-io.c" #include "inode.c" #include "io.c" #include "journal.c" #include "keybuf.c" #include "keylist.c" #include "migrate.c" #include "move.c" #include "movinggc.c" //#include "notify.c" #include "opts.c" //#include "request.c" #include "siphash.c" #include "six.c" //#include "stats.c" #include "super.c" #include "super-io.c" //#include "sysfs.c" #include "tier.c" #include "trace.c" #include "util.c" //#include "writeback.c" #include "xattr.c" #define SHIM_KTYPE(type) \ struct kobj_type type ## _ktype = { .release = type ## _release, } static void bch_fs_internal_release(struct kobject *k) {} static void bch_fs_opts_dir_release(struct kobject *k) {} static void bch_fs_time_stats_release(struct kobject *k) {} SHIM_KTYPE(bch_dev); SHIM_KTYPE(bch_fs); SHIM_KTYPE(bch_fs_internal); SHIM_KTYPE(bch_fs_time_stats); SHIM_KTYPE(bch_fs_opts_dir);