]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
Cleanup, rip out more code, fix compiler warnings
authorKent Overstreet <kmo@daterainc.com>
Tue, 27 Jan 2015 21:45:02 +0000 (13:45 -0800)
committerKent Overstreet <kmo@daterainc.com>
Tue, 27 Jan 2015 21:45:02 +0000 (13:45 -0800)
Change-Id: I76b410dc700a917d2717b1ceda0df061a1599144

12 files changed:
.gitignore
Makefile
Makefile.am
bcache-super-show.8 [deleted file]
bcache-super-show.c [deleted file]
bcache-tools.spec
bcache.c
bcache.h
bcacheadm.c
bcachectl.c [deleted file]
make-bcache.8 [deleted file]
make-bcache.c [deleted file]

index 74da3a468a5bd15887fa84aeddd840f49c08d695..7dcf7323318b71434d41efe043e2c49c64acf5c3 100644 (file)
@@ -1,8 +1,5 @@
-bcache-super-show
-make-bcache
 bcacheadm
 probe-bcache
-bcachectl
 .*
 *.o
 tags
index cda518757fcbe87765c4951d96786cb9ff45f6bb..34d86947cb152778a83b76546929abf6413fb56b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -3,40 +3,30 @@ PREFIX=/usr
 UDEVLIBDIR=/lib/udev
 DRACUTLIBDIR=/lib/dracut
 INSTALL=install
-CFLAGS+=-O2 -Wall -Werror -g -I.
+CFLAGS+=-std=gnu99 -O2 -Wall -Werror -g -I.
 
-all: bcacheadm make-bcache probe-bcache bcachectl
+all: bcacheadm probe-bcache
 
-install: bcacheadm make-bcache probe-bcache
-       $(INSTALL) -m0755 bcacheadm bcachectl $(DESTDIR)${PREFIX}/sbin/
-       $(INSTALL) -m0755 make-bcache bcachectl $(DESTDIR)${PREFIX}/sbin/
+install: bcacheadm probe-bcache
+       $(INSTALL) -m0755 bcacheadm $(DESTDIR)${PREFIX}/sbin/
        $(INSTALL) -m0755 probe-bcache bcache-register          $(DESTDIR)$(UDEVLIBDIR)/
        $(INSTALL) -m0644 69-bcache.rules       $(DESTDIR)$(UDEVLIBDIR)/rules.d/
        #-$(INSTALL) -T -m0755 initramfs/hook   $(DESTDIR)/usr/share/initramfs-tools/hooks/bcache
-       if [ -d $(DESTDIR)$(DRACUTLIBDIR)/modules.d ]; \
-       then $(INSTALL) -D -m0755 dracut/module-setup.sh $(DESTDIR)$(DRACUTLIBDIR)/modules.d/90bcache/module-setup.sh; \
+       if [ -d $(DESTDIR)$(DRACUTLIBDIR)/modules.d ]; then\
+               $(INSTALL) -D -m0755 dracut/module-setup.sh $(DESTDIR)$(DRACUTLIBDIR)/modules.d/90bcache/module-setup.sh; \
        fi
        $(INSTALL) -m0644 -- *.8 $(DESTDIR)${PREFIX}/share/man/man8/
-#      $(INSTALL) -m0755 bcache-test $(DESTDIR)${PREFIX}/sbin/
 
 clean:
-       $(RM) -f make-bcache probe-bcache bcache-super-show bcache-test bcachectl *.o
+       $(RM) -f probe-bcache bcacheadm bcache-test *.o
 
-bcache-test: LDLIBS += `pkg-config --libs openssl`
+bcache.o: CFLAGS += `pkg-config --cflags uuid blkid`
 
+bcacheadm.o: CFLAGS += `pkg-config --cflags uuid blkid libnih`
 bcacheadm: LDLIBS += `pkg-config --libs uuid blkid libnih`
-bcacheadm: CFLAGS += `pkg-config --cflags uuid blkid libnih`
 bcacheadm: bcache.o
 
-make-bcache: LDLIBS += `pkg-config --libs uuid blkid`
-make-bcache: CFLAGS += `pkg-config --cflags uuid blkid`
-make-bcache: bcache.o
-
+probe-bcache.o: CFLAGS += `pkg-config --cflags uuid blkid`
 probe-bcache: LDLIBS += `pkg-config --libs uuid blkid`
-probe-bcache: CFLAGS += `pkg-config --cflags uuid blkid`
 
-bcache-super-show: LDLIBS += `pkg-config --libs uuid`
-bcache-super-show: CFLAGS += -std=gnu99
-bcache-super-show: bcache.o
-
-bcachectl: bcachectl.o
+bcache-test: LDLIBS += `pkg-config --libs openssl`
index e421b8070a00a6eb587d139f9a9d9eba38342570..5b3a257b701037676107438ab1080d77b3815803 100644 (file)
@@ -2,42 +2,21 @@
 AUTOMAKE_OPTIONS=subdir-objects
 
 PREFIX=/usr
-AM_CFLAGS=-std=gnu99 `pkg-config --cflags uuid blkid`
-AM_LDFLAGS=`pkg-config --libs uuid blkid` -L$(top_builddir)
+AM_CFLAGS=-std=gnu99 -O2 -Wall -Werror -g
 
+bin_PROGRAMS=bcacheadm probe-bcache
 
-bin_PROGRAMS=make-bcache \
-            probe-bcache \
-            bcache-super-show \
-            bcachectl \
-            bcacheadm
-
-noinst_PROGRAMS=bcache-test
-
-lib_LIBRARIES=libbcache.a
-libbcache_a_SOURCES=bcache.c
-bcache_LDADD=libbcache.a
-
-make_bcache_SOURCES=make-bcache.c
-make_bcache_LDADD=libbcache.a
-
-probe_bcache_SOURCES=probe-bcache.c
-probe_bcache_LDADD=libbcache.a
-
-bcache_super_show_SOURCES=bcache-super-show.c
-bcache_super_show_LDADD=libbcache.a
-
-bcachectl_SOURCES=bcachectl.c
-
-bcache_test_SOURCES=bcache-test.c
-bcache_test_LDFLAGS=-lm `pkg-config --libs openssl`
-bcache_test_CFLAGS=$(AM_CFLAGS) `pkg-config --cflags openssl`
+bcache.o: CFLAGS += `pkg-config --cflags uuid blkid`
 
 bcacheadm_SOURCES=bcacheadm.c
-bcacheadm_CFLAGS=$(AM_CFLAGS) -g
-bcacheadm_LDFLAGS=$(AM_LDFLAGS) -lnih
-bcacheadm_LDADD=libbcache.a
+bcacheadm_CFLAGS=$(AM_CFLAGS) `pkg-config --cflags uuid blkid libnih`
+bcacheadm_LDFLAGS=`pkg-config --libs uuid blkid libnih`
+bcacheadm_LDADD=bcache.o
 
+probe_bcache_SOURCES=probe-bcache.c
+probe_bcache_CFLAGS=$(AM_CFLAGS) `pkg-config --cflags uuid blkid`
+probe_bcache_LDFLAGS=`pkg-config --libs uuid blkid`
+probe_bcache_LDADD=bcache.o
 
 udevrule_DATA=69-bcache.rules
 udevruledir=$(prefix)/lib/udev/rules.d
@@ -48,10 +27,7 @@ udevrdir=$(prefix)/lib/udev/
 initramfs_SCRIPTS=initramfs/bcache
 initramfsdir=$(prefix)/etc/initramfs-tools/hooks/
 
-man8_MANS= bcache-super-show.8 \
-          make-bcache.8 \
-          probe-bcache.8 \
-          bcacheadm.8
+man8_MANS=bcacheadm.8 probe-bcache.8
 
 include ../../../../../../../../../../usr/share/DateraContainer/Makefile.rpm
 # some version of automake don't like absolute path names for included makefiles
diff --git a/bcache-super-show.8 b/bcache-super-show.8
deleted file mode 100644 (file)
index 7d15a93..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-.TH bcache-super-show 8
-.SH NAME
-bcache-super-show \- Print the bcache superblock
-.SH SYNOPSIS
-.B bcache-super-show
-[\fB \-f]
-.I device
-.SH OPTIONS
-.TP
-.BR \-f
-Keep going if the superblock crc is invalid
diff --git a/bcache-super-show.c b/bcache-super-show.c
deleted file mode 100644 (file)
index 61c28aa..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Author: Gabriel de Perthuis <g2p.code@gmail.com>
- *
- * GPLv2
- */
-
-
-#define _FILE_OFFSET_BITS      64
-#define __USE_FILE_OFFSET64
-#define _XOPEN_SOURCE 500
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <inttypes.h>
-#include <linux/fs.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <uuid/uuid.h>
-
-#include "bcache.h"
-
-void usage()
-{
-       fprintf(stderr, "Usage: bcache-super-show [-f] <device>\n");
-}
-
-int main(int argc, char **argv)
-{
-       int o;
-       extern char *optarg;
-       struct cache_sb sb_stack, *sb = &sb_stack;
-       size_t bytes = sizeof(*sb);
-       bool force_csum = false;
-
-       while ((o = getopt(argc, argv, "f")) != EOF)
-               switch (o) {
-                       case 'f':
-                               force_csum = 1;
-                               break;
-
-                       default:
-                               usage();
-                               exit(1);
-               }
-
-       argv += optind;
-       argc -= optind;
-
-       if (argc != 1) {
-               usage();
-               exit(1);
-       }
-
-       int fd = open(argv[0], O_RDONLY);
-       if (fd < 0) {
-               printf("Can't open dev %s: %s\n", argv[0], strerror(errno));
-               exit(2);
-       }
-
-       if (pread(fd, sb, bytes, SB_START) != bytes) {
-               fprintf(stderr, "Couldn't read\n");
-               exit(2);
-       }
-
-       if (sb->u64s) {
-               bytes = sizeof(*sb) + sb->u64s * sizeof(uint64_t);
-               sb = malloc(bytes);
-
-               if (pread(fd, sb, bytes, SB_START) != bytes) {
-                       fprintf(stderr, "Couldn't read\n");
-                       exit(2);
-               }
-       }
-
-       if (!SB_IS_BDEV(sb))
-               show_super_cache(sb, force_csum);
-       else
-               show_super_backingdev(sb, force_csum);
-
-       return 0;
-}
index 0215f632dce6c80db5117552996ef11417c9b2c4..f46df12f1d7f39ea5954309faf936c69b059b15a 100644 (file)
@@ -20,11 +20,7 @@ make DESTDIR=%buildroot INSTALL=/usr/bin/install -C /bld/$RPM_PACKAGE_NAME insta
 
 %files
 %_bindir/bcacheadm
-%_bindir/bcachectl
-%_bindir/make-bcache
 %_bindir/probe-bcache
-%_bindir/bcache-super-show
-%_libdir/libbcache.a
 %_mandir/man8/*.gz
 %exclude %_prefix/etc/initramfs-tools/hooks/bcache
 %exclude %_prefix/lib/udev/bcache-register
index c9a02586f71b65761c46226a43ba0b4b4caa6b34..11f5c04f504740667585270a8405ce7c2e828de4 100644 (file)
--- a/bcache.c
+++ b/bcache.c
@@ -64,6 +64,42 @@ const char * const bdev_state[] = {
        NULL
 };
 
+const char * const set_attrs[] = {
+       "btree_flush_delay",
+       "btree_scan_ratelimit",
+       "bucket_reserve_percent",
+       "cache_reserve_percent",
+       "checksum_type",
+       "congested_read_threshold_us",
+       "congested_write_threshold_us",
+       "data_replicas",
+       "errors",
+       "foreground_target_percent",
+       "gc_sector_percent",
+       "journal_delay_ms",
+       "meta_replicas",
+       "sector_reserve_percent",
+       "tiering_percent",
+       NULL
+};
+
+const char * const cache_attrs[] = {
+       "cache_replacement_policy",
+       "discard",
+       "state",
+       "tier",
+       NULL
+};
+
+const char * const internal_attrs[] = {
+       "btree_shrinker_disabled",
+       "copy_gc_enabled",
+       "foreground_write_rate",
+       "tiering_enabled",
+       "tiering_rate",
+       NULL
+};
+
 char *skip_spaces(const char *str)
 {
        while (isspace(*str))
@@ -583,8 +619,8 @@ void write_cache_sbs(int *fds, struct cache_sb *sb,
                        m->bucket_size = bucket_sizes[0];
                } else {
                        if (!bucket_sizes[i]) {
-                               printf("No bucket size specified for cache %d,"
-                                      " using the default of %d",
+                               printf("No bucket size specified for cache %zu,"
+                                      " using the default of %u",
                                       i, bucket_sizes[0]);
                                m->bucket_size = bucket_sizes[0];
                        } else {
@@ -821,11 +857,6 @@ void show_super_backingdev(struct cache_sb *sb, bool force_csum)
               bdev_state[BDEV_STATE(sb)]);
 }
 
-static void show_cache_member(struct cache_sb *sb, unsigned i)
-{
-
-}
-
 void show_super_cache(struct cache_sb *sb, bool force_csum)
 {
        struct cache_member *m = sb->members + sb->nr_this_dev;
@@ -866,16 +897,16 @@ void show_super_cache(struct cache_sb *sb, bool force_csum)
        printf("cache.discard\t%llu\n",         CACHE_DISCARD(m));
 }
 
-static int __sysfs_attr_type(char *attr, const char **attr_arr) {
-       int i, j;
-       for(i = 0; attr_arr[i] != NULL; i++)
+static int __sysfs_attr_type(const char *attr, const char * const *attr_arr)
+{
+       for (unsigned i = 0; attr_arr[i] != NULL; i++)
                if(!strcmp(attr, attr_arr[i]))
                        return 1;
        return 0;
 }
 
-enum sysfs_attr sysfs_attr_type(char *attr) {
-       int ret;
+enum sysfs_attr sysfs_attr_type(const char *attr)
+{
        if(__sysfs_attr_type(attr, set_attrs))
                return SET_ATTR;
        if(__sysfs_attr_type(attr, cache_attrs))
@@ -888,13 +919,14 @@ enum sysfs_attr sysfs_attr_type(char *attr) {
        return -1;
 }
 
-static void __sysfs_attr_list(const char **attr_arr) {
-       int i, j;
-       for (i = 0; attr_arr[i] != NULL; i++)
+static void __sysfs_attr_list(const char * const *attr_arr)
+{
+       for (unsigned i = 0; attr_arr[i] != NULL; i++)
                printf("%s\n", attr_arr[i]);
 }
 
-void sysfs_attr_list() {
+void sysfs_attr_list()
+{
        __sysfs_attr_list(set_attrs);
        __sysfs_attr_list(cache_attrs);
        __sysfs_attr_list(internal_attrs);
@@ -968,8 +1000,8 @@ char *dev_name(const char *ugly_path) {
        return strdup(buf);
 }
 
-static void list_cacheset_devs(char *cset_dir, char *cset_name, bool parse_dev_name) {
-       int i = 0;
+static void list_cacheset_devs(char *cset_dir, char *cset_name, bool parse_dev_name)
+{
        DIR *cachedir, *dir;
        struct stat cache_stat;
        char entry[MAX_PATH];
@@ -1017,7 +1049,8 @@ static void list_cacheset_devs(char *cset_dir, char *cset_name, bool parse_dev_n
        }
 }
 
-char *find_matching_uuid(char *stats_dir, char *subdir, const char *stats_dev_uuid) {
+char *find_matching_uuid(char *stats_dir, char *subdir, const char *stats_dev_uuid)
+{
        /* Do a query-dev --uuid only to get the uuid
         * repeat on each dev until we find a matching one
         * append that cache# to subdir and return
@@ -1338,7 +1371,6 @@ char *read_stat_dir(DIR *dir, char *stats_dir, char *stat_name, char *ret)
        }
 
        if (S_ISREG(statbuf.st_mode)) {
-               char buf[MAX_PATH];
                FILE *fp = NULL;
 
                fp = fopen(entry, "r");
@@ -1356,7 +1388,7 @@ err:
 }
 
 char *bcache_get_capacity(const char *cset_dir, const char *capacity_uuid,
-               bool show_devs)
+                         bool show_devs)
 {
        char *err = NULL;
        char bucket_size_path[MAX_PATH];
@@ -1373,7 +1405,6 @@ char *bcache_get_capacity(const char *cset_dir, const char *capacity_uuid,
        double total_cap = 0, total_free = 0;
        int precision = 2;
 
-       snprintf(intbuf, 4, "%d", i);
        snprintf(bucket_size_path, MAX_PATH, "%s/%s/%s/%s", cset_dir,
                        capacity_uuid, "cache0", "bucket_size_bytes");
        snprintf(nbuckets_path, MAX_PATH, "%s/%s/%s/%s", cset_dir,
@@ -1383,7 +1414,7 @@ char *bcache_get_capacity(const char *cset_dir, const char *capacity_uuid,
        snprintf(cache_path, MAX_PATH, "%s/%s/%s", cset_dir, capacity_uuid,
                        "cache0");
 
-       while(true) {
+       while (true) {
                char buf[MAX_PATH];
                int len;
                DIR *cache_dir;
@@ -1417,6 +1448,8 @@ char *bcache_get_capacity(const char *cset_dir, const char *capacity_uuid,
                        dev_names[dev_count] = dev_name(buf);
                }
 
+               snprintf(intbuf, 4, "%d", dev_count);
+
                /* remove i/stat and append i++/stat */
                bucket_size_path[strlen(cache_path) - strlen(intbuf)] = 0;
                nbuckets_path[strlen(cache_path) - strlen(intbuf)] = 0;
@@ -1425,7 +1458,6 @@ char *bcache_get_capacity(const char *cset_dir, const char *capacity_uuid,
 
                dev_count++;
 
-               snprintf(intbuf, 4, "%d", dev_count);
                strcat(cache_path, intbuf);
                strcat(bucket_size_path, intbuf);
                strcat(nbuckets_path, intbuf);
index c9987d0dbeb45daedced98ad27907eecd141a54f..39fbb405934c285c1eeacffbf79328bf36f81c4a 100644 (file)
--- a/bcache.h
+++ b/bcache.h
@@ -50,6 +50,9 @@ extern const char * const replacement_policies[];
 extern const char * const csum_types[];
 extern const char * const bdev_cache_mode[];
 extern const char * const bdev_state[];
+extern const char * const set_attr[];
+extern const char * const cache_attrs[];
+extern const char * const internal_attrs[];
 
 ssize_t read_string_list(const char *, const char * const[]);
 ssize_t read_string_list_or_die(const char *, const char * const[],
@@ -74,43 +77,7 @@ void show_super_cache(struct cache_sb *, bool);
 
 enum sysfs_attr {SET_ATTR, CACHE_ATTR, INTERNAL_ATTR};
 
-static const char *set_attrs[] = {
-       "btree_flush_delay",
-       "btree_scan_ratelimit",
-       "bucket_reserve_percent",
-       "cache_reserve_percent",
-       "checksum_type",
-       "congested_read_threshold_us",
-       "congested_write_threshold_us",
-       "data_replicas",
-       "errors",
-       "foreground_target_percent",
-       "gc_sector_percent",
-       "journal_delay_ms",
-       "meta_replicas",
-       "sector_reserve_percent",
-       "tiering_percent",
-       NULL
-};
-
-static const char *cache_attrs[] = {
-       "cache_replacement_policy",
-       "discard",
-       "state",
-       "tier",
-       NULL
-};
-
-static const char *internal_attrs[] = {
-       "btree_shrinker_disabled",
-       "copy_gc_enabled",
-       "foreground_write_rate",
-       "tiering_enabled",
-       "tiering_rate",
-       NULL
-};
-
-enum sysfs_attr sysfs_attr_type(char *attr);
+enum sysfs_attr sysfs_attr_type(const char *attr);
 void sysfs_attr_list();
 
 struct cache_sb *query_dev(char *, bool, bool, bool, char *dev_uuid);
index f376245b5e73c9392e2ebd0d9af26fedfc1d4235..cf1ecfc28129b90aa66134bcb3e0de19020a0c6e 100644 (file)
@@ -477,8 +477,6 @@ int bcache_modify(NihCommand *command, char *const *args)
 {
        char *err;
        char path[MAX_PATH];
-       DIR *path_dir;
-       struct stat cache_stat;
        char *attr = args[0];
        char *val = NULL;
        int fd = -1;
@@ -604,7 +602,7 @@ int bcache_query_devs(NihCommand *command, char *const *args)
 
 int bcache_status(NihCommand *command, char *const *args)
 {
-       int i, dev_count = 0, seq, nr_in_set = 0;
+       int i, dev_count = 0, seq;
        struct cache_sb *seq_sb = NULL;
        char cache_path[MAX_PATH];
        char *dev_names[MAX_DEVS];
@@ -624,7 +622,6 @@ int bcache_status(NihCommand *command, char *const *args)
                if (!seq_sb || sb->seq > seq) {
                        seq = sb->seq;
                        seq_sb = sb;
-                       nr_in_set = sb->nr_in_set;
                } else
                        free(sb);
        }
@@ -825,7 +822,6 @@ err:
 
 int bcache_set_failed(NihCommand *command, char *const *args)
 {
-       int i;
        char *err = NULL;
 
        if (!dev_failed_uuid) {
diff --git a/bcachectl.c b/bcachectl.c
deleted file mode 100644 (file)
index 508f89e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-
-#define __KERNEL__
-#include <linux/bcache-ioctl.h>
-#undef __KERNEL__
-
-int bcachefd;
-
-static int register_devices(int argc, char *argv[])
-{
-       int ret;
-       ret = ioctl(bcachefd, BCH_IOCTL_REGISTER, argv);
-       if (ret < 0) {
-               fprintf(stderr, "ioctl error %d", ret);
-               exit(EXIT_FAILURE);
-       }
-       return 0;
-}
-
-int main(int argc, char *argv[])
-{
-       char *ioctl = argv[1];
-
-       if (argc < 3) {
-               fprintf(stderr, " <Usage> %s <action> <space separated list of devices>", argv[0]);
-               fprintf(stderr, "\n <Help>  Possible actions are: \n");
-               fprintf(stderr, "          \t 1. register_devices\n");
-               exit(EXIT_FAILURE);
-       }
-
-       bcachefd = open("/dev/bcache", O_RDWR);
-       if (bcachefd < 0) {
-               perror("Can't open bcache device");
-               exit(EXIT_FAILURE);
-       }
-
-       argc -= 2;
-       argv += 2;
-
-       if (!strcmp(ioctl, "register"))
-               return register_devices(argc, argv);
-       else {
-               fprintf(stderr, "Unknown ioctl\n");
-               exit(EXIT_FAILURE);
-       }
-       return 0;
-}
diff --git a/make-bcache.8 b/make-bcache.8
deleted file mode 100644 (file)
index 337a414..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-.TH make-bcache 8
-.SH NAME
-make-bcache \- create a cache device
-.SH  SYNOPSIS
-.B make-bcache
-[\fB \-U\ \fIUUID\fR ]
-[\fB \-b\ \fIbucket-size\fR ]
-.I device
-.SH OPTIONS
-.TP
-.BR \-C
-Create a cache
-.TP
-.BR \-B
-Create a backing device (kernel functionality not yet implemented)
-.TP
-.BR \-U\ \fIUUID
-Create a cache device with the specified UUID
-.TP
-.BR \-b\ \fIbucket-size
-Spcifies the bucket size. Allocation is done in terms of buckets, and cache
-hits are counted per bucket; thus a smaller bucket size will give better cache
-utilization, but poorer write performance. The bucket size is intended to be
-equal to the size of your SSD's erase blocks, which seems to be 128k-512k for
-most SSDs. Must be a power of two; accepts human readable units. Defaults to
-128k.
diff --git a/make-bcache.c b/make-bcache.c
deleted file mode 100644 (file)
index 8a94461..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Author: Kent Overstreet <kmo@daterainc.com>
- *
- * GPLv2
- */
-
-#define _FILE_OFFSET_BITS      64
-#define __USE_FILE_OFFSET 64
-#define _XOPEN_SOURCE 600
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <limits.h>
-#include <linux/fs.h>
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <uuid/uuid.h>
-
-#include "bcache.h"
-
-void usage()
-{
-       fprintf(stderr,
-                  "Usage: make-bcache [options] device\n"
-              "        -C, --cache                     Format a cache device\n"
-              "        -B, --bdev                      Format a backing device\n"
-              "            --wipe-bcache               destroy existing bcache data if present\n"
-              "        -l, --label                     label\n"
-              "            --cset-uuid                 UUID for the cache set\n"
-              "            --csum-type                 One of (none|crc32c|crc64)\n"
-
-              "        -b, --bucket                    bucket size\n"
-              "        -w, --block                     block size (hard sector size of SSD, often 2k)\n"
-
-              "            --replication-set           replication set of subsequent devices\n"
-              "            --meta-replicas             number of metadata replicas\n"
-              "            --data-replicas             number of data replicas\n"
-              "            --tier                      tier of subsequent devices\n"
-              "            --cache_replacement_policy  one of (lru|fifo|random)\n"
-              "            --discard                   enable discards\n"
-
-              "            --writeback                 enable writeback\n"
-              "        -o, --data-offset               data offset in sectors\n"
-              "        -h, --help                      display this help and exit\n");
-       exit(EXIT_FAILURE);
-}
-
-int main(int argc, char **argv)
-{
-       int c, bdev = -1;
-       size_t i, nr_backing_devices = 0;
-
-       unsigned block_size = 0;
-       unsigned bucket_sizes[argc];
-       int num_bucket_sizes = 0;
-       int writeback = 0, discard = 0, wipe_bcache = 0;
-       unsigned replication_set = 0, tier = 0, replacement_policy = 0;
-       uint64_t data_offset = BDEV_DATA_START_DEFAULT;
-       char *label = NULL;
-
-       const char *cache_devices[argc];
-       int cache_dev_fd[argc];
-
-       const char *backing_devices[argc];
-       int backing_dev_fd[argc];
-       const char *backing_dev_labels[argc];
-
-       enum long_opts {
-               CACHE_SET_UUID = 256,
-               CSUM_TYPE,
-               REPLICATION_SET,
-               META_REPLICAS,
-               DATA_REPLICAS,
-       };
-
-       const struct option opts[] = {
-               { "cache",                      0, NULL,        'C' },
-               { "bdev",                       0, NULL,        'B' },
-               { "wipe-bcache",                0, &wipe_bcache, 1  },
-               { "label",                      1, NULL,        'l' },
-               { "cset-uuid",                  1, NULL,        CACHE_SET_UUID },
-               { "csum-type",                  1, NULL,        CSUM_TYPE },
-
-               { "bucket",                     1, NULL,        'b' },
-               { "block",                      1, NULL,        'w' },
-
-               { "replication-set",            1, NULL,        REPLICATION_SET },
-               { "meta-replicas",              1, NULL,        META_REPLICAS},
-               { "data-replicas",              1, NULL,        DATA_REPLICAS },
-               { "tier",                       1, NULL,        't' },
-               { "cache_replacement_policy",   1, NULL,        'p' },
-               { "discard",                    0, &discard,    1   },
-
-               { "writeback",                  0, &writeback,  1   },
-               { "data_offset",                1, NULL,        'o' },
-
-               { "help",                       0, NULL,        'h' },
-               { NULL,                         0, NULL,        0 },
-       };
-
-       struct cache_sb *cache_set_sb = calloc(1, sizeof(*cache_set_sb) +
-                                    sizeof(struct cache_member) * argc);
-
-       uuid_generate(cache_set_sb->set_uuid.b);
-       SET_CACHE_PREFERRED_CSUM_TYPE(cache_set_sb, BCH_CSUM_CRC32C);
-       SET_CACHE_SET_META_REPLICAS_WANT(cache_set_sb, 1);
-       SET_CACHE_SET_DATA_REPLICAS_WANT(cache_set_sb, 1);
-       bucket_sizes[0] = 1024;
-
-       while ((c = getopt_long(argc, argv,
-                               "-hCBU:w:b:l:",
-                               opts, NULL)) != -1) {
-
-               switch (c) {
-               case 'C':
-                       bdev = 0;
-                       break;
-               case 'B':
-                       bdev = 1;
-                       break;
-               case 'l':
-                       label = optarg;
-                       memcpy(cache_set_sb->label, label,
-                              sizeof(cache_set_sb->label));
-                       break;
-               case CACHE_SET_UUID:
-                       if (uuid_parse(optarg, cache_set_sb->set_uuid.b)) {
-                               fprintf(stderr, "Bad uuid\n");
-                               exit(EXIT_FAILURE);
-                       }
-                       break;
-               case CSUM_TYPE:
-                       SET_CACHE_PREFERRED_CSUM_TYPE(cache_set_sb,
-                               read_string_list_or_die(optarg, csum_types,
-                                                       "csum type"));
-                       break;
-
-               case 'b':
-                       bucket_sizes[num_bucket_sizes] = hatoi_validate(optarg, "bucket size");
-                       num_bucket_sizes++;
-                       break;
-               case 'w':
-                       block_size = hatoi_validate(optarg, "block size");
-                       break;
-
-               case REPLICATION_SET:
-                       replication_set = strtoul_or_die(optarg,
-                                                        CACHE_REPLICATION_SET_MAX,
-                                                        "replication set");
-                       break;
-               case META_REPLICAS:
-                       SET_CACHE_SET_META_REPLICAS_WANT(cache_set_sb,
-                                       strtoul_or_die(optarg, 
-                                                      CACHE_SET_META_REPLICAS_WANT_MAX,
-                                                      "meta replicas"));
-                       break;
-               case DATA_REPLICAS:
-                       SET_CACHE_SET_DATA_REPLICAS_WANT(cache_set_sb,
-                                       strtoul_or_die(optarg, 
-                                                      CACHE_SET_DATA_REPLICAS_WANT_MAX,
-                                                      "data replicas"));
-                       break;
-               case 't':
-                       tier = strtoul_or_die(optarg, CACHE_TIERS, "tier");
-                       break;
-               case 'p':
-                       replacement_policy = read_string_list_or_die(optarg,
-                                                       replacement_policies,
-                                                       "cache replacement policy");
-                       break;
-
-               case 'o':
-                       data_offset = atoll(optarg);
-                       if (data_offset < BDEV_DATA_START_DEFAULT) {
-                               fprintf(stderr, "Bad data offset; minimum %d sectors\n",
-                                      BDEV_DATA_START_DEFAULT);
-                               exit(EXIT_FAILURE);
-                       }
-                       break;
-               case 'h':
-                       usage();
-                       break;
-               case 1:
-                       if (bdev == -1) {
-                               fprintf(stderr, "Please specify -C or -B\n");
-                               exit(EXIT_FAILURE);
-                       }
-
-                       if (bdev) {
-                               backing_dev_labels[nr_backing_devices] = label;
-                               backing_devices[nr_backing_devices++] = optarg;
-                       } else {
-                               cache_devices[cache_set_sb->nr_in_set] = optarg;
-                               next_cache_device(cache_set_sb,
-                                                 replication_set,
-                                                 tier,
-                                                 replacement_policy,
-                                                 discard);
-                       }
-
-                       break;
-               }
-       }
-
-       if (!cache_set_sb->nr_in_set && !nr_backing_devices) {
-               fprintf(stderr, "Please supply a device\n");
-               usage();
-       }
-
-       i = 0;
-       do {
-               if (bucket_sizes[i] < block_size) {
-                       fprintf(stderr, "Bucket size cannot be smaller than block size\n");
-                       exit(EXIT_FAILURE);
-               }
-               i++;
-       } while (i < num_bucket_sizes);
-
-       if (!block_size) {
-               for (i = 0; i < cache_set_sb->nr_in_set; i++)
-                       block_size = max(block_size,
-                                        get_blocksize(cache_devices[i]));
-
-               for (i = 0; i < nr_backing_devices; i++)
-                       block_size = max(block_size,
-                                        get_blocksize(backing_devices[i]));
-       }
-
-       for (i = 0; i < cache_set_sb->nr_in_set; i++)
-               cache_dev_fd[i] = dev_open(cache_devices[i], wipe_bcache);
-
-       for (i = 0; i < nr_backing_devices; i++)
-               backing_dev_fd[i] = dev_open(backing_devices[i], wipe_bcache);
-
-       write_cache_sbs(cache_dev_fd, cache_set_sb, block_size,
-                                       bucket_sizes, num_bucket_sizes);
-
-       for (i = 0; i < nr_backing_devices; i++)
-               write_backingdev_sb(backing_dev_fd[i],
-                                   block_size, bucket_sizes,
-                                   writeback
-                                       ? CACHE_MODE_WRITEBACK
-                                       : CACHE_MODE_WRITETHROUGH,
-                                   data_offset,
-                                   backing_dev_labels[i],
-                                   cache_set_sb->user_uuid,
-                                   cache_set_sb->set_uuid);
-
-       return 0;
-}