diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-08 00:13:18 -0900 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2017-01-20 09:07:08 -0900 |
commit | b33fc8298f7e13226b9895abc57c9bfce5e3fa2d (patch) | |
tree | a3d2a5a909b6372f7777c1c5c18cef5f81d123a9 /bcache-userspace-shim.c | |
parent | 7f4191a202ea4558ca2d5eb8a47daea33c9999c7 (diff) |
bcache in userspace; userspace fsck
Diffstat (limited to 'bcache-userspace-shim.c')
-rw-r--r-- | bcache-userspace-shim.c | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/bcache-userspace-shim.c b/bcache-userspace-shim.c new file mode 100644 index 0000000..c4a5466 --- /dev/null +++ b/bcache-userspace-shim.c @@ -0,0 +1,143 @@ + +#include <errno.h> +#include <linux/byteorder.h> +#include <linux/types.h> + +/* stub out the bcache code we aren't building: */ + +struct block_device; +struct bcache_superblock; +struct cache; +struct cache_accounting; +struct cache_set; +struct closure; +struct file; +struct kobject; + +struct kmem_cache *bch_search_cache; + +const char *bch_backing_dev_register(struct bcache_superblock *sb) +{ + return "not implemented"; +} +void bch_blockdevs_stop(struct cache_set *c) {} +int bch_blockdev_volumes_start(struct cache_set *c) { return 0; } +void bch_attach_backing_devs(struct cache_set *c) {} +bool bch_is_open_backing_dev(struct block_device *bdev) { return false; } +void bch_blockdev_exit(void) {} +int bch_blockdev_init(void) { return 0; } + +void bch_fs_exit(void) {} +int bch_fs_init(void) { return 0; } + +const struct file_operations bch_chardev_fops; + +void bcache_dev_sectors_dirty_add(struct cache_set *c, unsigned inode, + u64 offset, int nr_sectors) {} +void bch_writeback_recalc_oldest_gens(struct cache_set *c) {} + +void bch_notify_cache_set_read_write(struct cache_set *c) {} +void bch_notify_cache_set_read_only(struct cache_set *c) {} +void bch_notify_cache_set_stopped(struct cache_set *c) {} +void bch_notify_cache_read_write(struct cache *c) {} +void bch_notify_cache_read_only(struct cache *c) {} +void bch_notify_cache_added(struct cache *c) {} +void bch_notify_cache_removing(struct cache *c) {} +void bch_notify_cache_removed(struct cache *c) {} +void bch_notify_cache_remove_failed(struct cache *c) {} +void bch_notify_cache_error(struct cache *c, bool b) {} + +int bch_cache_accounting_add_kobjs(struct cache_accounting *acc, + struct kobject *parent) { return 0; } +void bch_cache_accounting_destroy(struct cache_accounting *acc) {} +void bch_cache_accounting_init(struct cache_accounting *acc, + struct closure *parent) {} + +//#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 "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_cache_set_internal_release(struct kobject *k) {} + +static void bch_cache_set_opts_dir_release(struct kobject *k) {} + +static void bch_cache_set_time_stats_release(struct kobject *k) {} + +SHIM_KTYPE(bch_cache); +SHIM_KTYPE(bch_cache_set); +SHIM_KTYPE(bch_cache_set_internal); +SHIM_KTYPE(bch_cache_set_time_stats); +SHIM_KTYPE(bch_cache_set_opts_dir); + +//#include "tools-util.h" + +int cmd_fsck(int argc, char *argv[]) +{ + DECLARE_COMPLETION_ONSTACK(shutdown); + struct cache_set_opts opts = cache_set_opts_empty(); + struct cache_set *c = NULL; + const char *err; + + printf("registering %s...\n", argv[1]); + + err = bch_register_cache_set(argv + 1, argc - 1, opts, &c); + if (err) { + BUG_ON(c); + fprintf(stderr, "error opening %s: %s\n", argv[1], err); + exit(EXIT_FAILURE); + } + + c->stop_completion = &shutdown; + bch_cache_set_stop(c); + closure_put(&c->cl); + + /* Killable? */ + wait_for_completion(&shutdown); + + return 0; +} |