]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - cmd_device.c
v1.4.0: Split brain detection
[bcachefs-tools-debian] / cmd_device.c
index 3d67e3ed00fed9f9bb5634c7c7a697d89c1ac92e..d4282f75290c40517818203c4a45af60db300f99 100644 (file)
@@ -113,7 +113,9 @@ int cmd_device_add(int argc, char *argv[])
 
        struct bchfs_handle fs = bcache_fs_open(fs_path);
 
-       dev_opts.fd = open_for_format(dev_opts.path, force);
+       int ret = open_for_format(&dev_opts, force);
+       if (ret)
+               die("Error opening %s: %s", dev_opts.path, strerror(-ret));
 
        struct bch_opt_strs fs_opt_strs;
        memset(&fs_opt_strs, 0, sizeof(fs_opt_strs));
@@ -130,8 +132,8 @@ int cmd_device_add(int argc, char *argv[])
                                        format_opts,
                                        &dev_opts, 1);
        free(sb);
-       fsync(dev_opts.fd);
-       close(dev_opts.fd);
+       fsync(dev_opts.bdev->bd_buffered_fd);
+       close(dev_opts.bdev->bd_buffered_fd);
 
        bchu_disk_add(fs, dev_opts.path);
        return 0;
@@ -322,15 +324,17 @@ int cmd_device_evacuate(int argc, char *argv[])
        int dev_idx;
        struct bchfs_handle fs = bchu_fs_open_by_dev(dev_path, &dev_idx);
 
-       struct bch_ioctl_dev_usage u = bchu_dev_usage(fs, dev_idx);
+       struct bch_ioctl_dev_usage_v2 *u = bchu_dev_usage(fs, dev_idx);
 
-       if (u.state == BCH_MEMBER_STATE_rw) {
+       if (u->state == BCH_MEMBER_STATE_rw) {
                printf("Setting %s readonly\n", dev_path);
                bchu_disk_set_state(fs, dev_idx, BCH_MEMBER_STATE_ro, 0);
        }
 
+       free(u);
+
        return bchu_data(fs, (struct bch_ioctl_data) {
-               .op             = BCH_DATA_OP_MIGRATE,
+               .op             = BCH_DATA_OP_migrate,
                .start_btree    = 0,
                .start_pos      = POS_MIN,
                .end_btree      = BTREE_ID_NR,
@@ -526,10 +530,9 @@ int cmd_device_resize(int argc, char *argv[])
                if (IS_ERR(c))
                        die("error opening %s: %s", dev, bch2_err_str(PTR_ERR(c)));
 
-               struct bch_dev *ca, *resize = NULL;
-               unsigned i;
+               struct bch_dev *resize = NULL;
 
-               for_each_online_member(ca, c, i) {
+               for_each_online_member(c, ca) {
                        if (resize)
                                die("confused: more than one online device?");
                        resize = ca;
@@ -624,10 +627,9 @@ int cmd_device_resize_journal(int argc, char *argv[])
                if (IS_ERR(c))
                        die("error opening %s: %s", dev, bch2_err_str(PTR_ERR(c)));
 
-               struct bch_dev *ca, *resize = NULL;
-               unsigned i;
+               struct bch_dev *resize = NULL;
 
-               for_each_online_member(ca, c, i) {
+               for_each_online_member(c, ca) {
                        if (resize)
                                die("confused: more than one online device?");
                        resize = ca;