]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - cmd_device.c
New upstream release
[bcachefs-tools-debian] / cmd_device.c
index c59d37094761dccb5d83b9905d34cce451714c75..1cb31ab858422f7f5646aeb2ee7d3d7dd38f6c35 100644 (file)
@@ -16,6 +16,7 @@
 #include "libbcachefs/bcachefs_ioctl.h"
 #include "libbcachefs/errcode.h"
 #include "libbcachefs/journal.h"
+#include "libbcachefs/sb-members.h"
 #include "libbcachefs/super-io.h"
 #include "cmds.h"
 #include "libbcachefs.h"
@@ -112,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));
@@ -129,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;
@@ -413,7 +416,7 @@ int cmd_device_set_state(int argc, char *argv[])
                if (ret)
                        die("error opening %s: %s", dev_str, bch2_err_str(ret));
 
-               struct bch_member *m = bch2_sb_get_members(sb.sb)->members + sb.sb->dev_idx;
+               struct bch_member *m = bch2_members_v2_get_mut(sb.sb, sb.sb->dev_idx);
 
                SET_BCH_MEMBER_STATE(m, new_state);
 
@@ -483,7 +486,7 @@ int cmd_device_resize(int argc, char *argv[])
 
        char *size_arg = arg_pop();
        if (!size_arg)
-               size = get_size(dev, dev_fd);
+               size = get_size(dev_fd);
        else if (bch2_strtoull_h(size_arg, &size))
                die("invalid size");
 
@@ -509,16 +512,11 @@ int cmd_device_resize(int argc, char *argv[])
                if (idx >= sb->nr_devices)
                        die("error reading superblock: dev idx >= sb->nr_devices");
 
-               struct bch_sb_field_members *mi = bch2_sb_get_members(sb);
-               if (!mi)
-                       die("error reading superblock: no member info");
+               struct bch_member m = bch2_sb_member_get(sb, idx);
 
-               /* could also just read this out of sysfs... meh */
-               struct bch_member *m = mi->members + idx;
+               u64 nbuckets = size / le16_to_cpu(m.bucket_size);
 
-               u64 nbuckets = size / le16_to_cpu(m->bucket_size);
-
-               if (nbuckets < le64_to_cpu(m->nbuckets))
+               if (nbuckets < le64_to_cpu(m.nbuckets))
                        die("Shrinking not supported yet");
 
                printf("resizing %s to %llu buckets\n", dev, nbuckets);
@@ -615,14 +613,9 @@ int cmd_device_resize_journal(int argc, char *argv[])
                if (idx >= sb->nr_devices)
                        die("error reading superblock: dev idx >= sb->nr_devices");
 
-               struct bch_sb_field_members *mi = bch2_sb_get_members(sb);
-               if (!mi)
-                       die("error reading superblock: no member info");
-
-               /* could also just read this out of sysfs... meh */
-               struct bch_member *m = mi->members + idx;
+               struct bch_member m = bch2_sb_member_get(sb, idx);
 
-               u64 nbuckets = size / le16_to_cpu(m->bucket_size);
+               u64 nbuckets = size / le16_to_cpu(m.bucket_size);
 
                printf("resizing journal on %s to %llu buckets\n", dev, nbuckets);
                bchu_disk_resize_journal(fs, idx, nbuckets);