db07609875
segfaults from bnc#710486 due to unchecked usage of return value of open_ctree() [fixed compilation warnings] - pull upstream, replace existing patches, spec update - update 'restore' utility - lzo support - tools may now take earlies superblock when opening the fs - other fixes - pull integration-20111030 branch - mkfs: force mkfs if desired - other fixes - add btrfs-dump-super to mkinitrd - other fixes - skip non-existent devices or without media - documentation updates - scrubbing single device - graceful error handling when opening fs fails - updated mkinitrd script to scan devices before mount (bnc#727383) OBS-URL: https://build.opensuse.org/package/show/filesystems/btrfsprogs?expand=0&rev=115
751 lines
19 KiB
Diff
751 lines
19 KiB
Diff
From 927d075e63d7c21038c53eae1e1b1edbdb01cdcf Mon Sep 17 00:00:00 2001
|
|
From: David Sterba <dsterba@suse.cz>
|
|
Date: Wed, 14 Dec 2011 18:46:02 +0100
|
|
Subject: [PATCH] Revert "Btrfs-progs: add restriper commands"
|
|
|
|
This reverts commit 192484f121dbbffd004303a760ef8b4dbd470ce2.
|
|
---
|
|
btrfs.c | 21 ---
|
|
btrfs_cmds.c | 505 +---------------------------------------------------------
|
|
btrfs_cmds.h | 5 -
|
|
ctree.h | 9 -
|
|
ioctl.h | 46 +-----
|
|
print-tree.c | 3 -
|
|
volumes.h | 42 -----
|
|
7 files changed, 3 insertions(+), 628 deletions(-)
|
|
|
|
diff --git a/btrfs.c b/btrfs.c
|
|
index 52af8f7..66b0d80 100644
|
|
--- a/btrfs.c
|
|
+++ b/btrfs.c
|
|
@@ -329,27 +329,6 @@ static struct Command commands[] = {
|
|
"Show status of running or finished scrub.",
|
|
NULL
|
|
},
|
|
- { do_restripe, -1,
|
|
- "filesystem restripe start", "[-d [filters]] [-m [filters]] "
|
|
- "[-s [filters]] [-vf] <path>\n"
|
|
- "Start restriper."
|
|
- },
|
|
- { do_restripe_cancel, 1,
|
|
- "filesystem restripe cancel", "<path>\n"
|
|
- "Cancel restriper."
|
|
- },
|
|
- { do_restripe_pause, 1,
|
|
- "filesystem restripe pause", "<path>\n"
|
|
- "Pause restriper."
|
|
- },
|
|
- { do_restripe_resume, 1,
|
|
- "filesystem restripe resume", "<path>\n"
|
|
- "Resume interrupted restripe operation."
|
|
- },
|
|
- { do_restripe_progress, -1,
|
|
- "filesystem restripe status", "[-v] <path>\n"
|
|
- "Show status of running or paused restripe operation."
|
|
- },
|
|
{ do_scan, 999,
|
|
"device scan", "[<device>...]\n"
|
|
"Scan all device for or the passed device for a btrfs\n"
|
|
diff --git a/btrfs_cmds.c b/btrfs_cmds.c
|
|
index e4c5592..1bfc669 100644
|
|
--- a/btrfs_cmds.c
|
|
+++ b/btrfs_cmds.c
|
|
@@ -1094,515 +1094,14 @@ int do_balance(int argc, char **argv)
|
|
e = errno;
|
|
close(fdmnt);
|
|
if(ret<0){
|
|
- if (e == ECANCELED) {
|
|
- fprintf(stderr, "restripe interrupted by user\n");
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: error during restriping '%s' "
|
|
- "- %s\n", path, strerror(e));
|
|
- return 19;
|
|
- }
|
|
- }
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static int parse_one_profile(char *profile, u64 *flags)
|
|
-{
|
|
- if (!strcmp(profile, "raid0")) {
|
|
- *flags |= BTRFS_BLOCK_GROUP_RAID0;
|
|
- } else if (!strcmp(profile, "raid1")) {
|
|
- *flags |= BTRFS_BLOCK_GROUP_RAID1;
|
|
- } else if (!strcmp(profile, "raid10")) {
|
|
- *flags |= BTRFS_BLOCK_GROUP_RAID10;
|
|
- } else if (!strcmp(profile, "dup")) {
|
|
- *flags |= BTRFS_BLOCK_GROUP_DUP;
|
|
- } else if (!strcmp(profile, "single")) {
|
|
- *flags |= BTRFS_AVAIL_ALLOC_BIT_SINGLE;
|
|
- } else {
|
|
- fprintf(stderr, "Unknown profile '%s'\n", profile);
|
|
- return 1;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static int parse_profiles(char *profiles, u64 *flags)
|
|
-{
|
|
- char *this_char;
|
|
- char *save_ptr;
|
|
-
|
|
- for (this_char = strtok_r(profiles, "|", &save_ptr);
|
|
- this_char != NULL;
|
|
- this_char = strtok_r(NULL, "|", &save_ptr)) {
|
|
- if (parse_one_profile(this_char, flags))
|
|
- return 1;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static int parse_range(char *range, u64 *start, u64 *end)
|
|
-{
|
|
- char *dots;
|
|
-
|
|
- dots = strstr(range, "..");
|
|
- if (dots) {
|
|
- const char *rest = dots + 2;
|
|
- int skipped = 0;
|
|
-
|
|
- *dots = 0;
|
|
-
|
|
- if (!*rest) {
|
|
- *end = (u64)-1;
|
|
- skipped++;
|
|
- } else {
|
|
- *end = strtoull(rest, (char **)NULL, 10);
|
|
- }
|
|
- if (dots == range) {
|
|
- *start = 0;
|
|
- skipped++;
|
|
- } else {
|
|
- *start = strtoull(range, (char **)NULL, 10);
|
|
- }
|
|
-
|
|
- if (skipped <= 1)
|
|
- return 0;
|
|
- }
|
|
-
|
|
- return 1;
|
|
-}
|
|
-
|
|
-static int parse_filters(char *filters, struct btrfs_restripe_args *rargs)
|
|
-{
|
|
- char *this_char;
|
|
- char *value;
|
|
- char *save_ptr;
|
|
-
|
|
- if (!filters)
|
|
- return 0;
|
|
-
|
|
- for (this_char = strtok_r(filters, ",", &save_ptr);
|
|
- this_char != NULL;
|
|
- this_char = strtok_r(NULL, ",", &save_ptr)) {
|
|
- if ((value = strchr(this_char, '=')) != NULL)
|
|
- *value++ = 0;
|
|
- if (!strcmp(this_char, "profiles")) {
|
|
- if (!value || !*value) {
|
|
- fprintf(stderr, "the profiles filter requires "
|
|
- "an argument\n");
|
|
- return 1;
|
|
- }
|
|
- if (parse_profiles(value, &rargs->profiles)) {
|
|
- fprintf(stderr, "Invalid profiles argument\n");
|
|
- return 1;
|
|
- }
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_PROFILES;
|
|
- } else if (!strcmp(this_char, "usage")) {
|
|
- if (!value || !*value) {
|
|
- fprintf(stderr, "the usage filter requires "
|
|
- "an argument\n");
|
|
- return 1;
|
|
- }
|
|
- rargs->usage = strtoull(value, (char **)NULL, 10);
|
|
- if (rargs->usage < 1 || rargs->usage > 100) {
|
|
- fprintf(stderr, "Invalid usage argument: %s\n",
|
|
- value);
|
|
- return 1;
|
|
- }
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_USAGE;
|
|
- } else if (!strcmp(this_char, "devid")) {
|
|
- if (!value || !*value) {
|
|
- fprintf(stderr, "the devid filter requires "
|
|
- "an argument\n");
|
|
- return 1;
|
|
- }
|
|
- rargs->devid = strtoull(value, (char **)NULL, 10);
|
|
- if (rargs->devid == 0) {
|
|
- fprintf(stderr, "Invalid devid argument: %s\n",
|
|
- value);
|
|
- return 1;
|
|
- }
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_DEVID;
|
|
- } else if (!strcmp(this_char, "drange")) {
|
|
- if (!value || !*value) {
|
|
- fprintf(stderr, "the drange filter requires "
|
|
- "an argument\n");
|
|
- return 1;
|
|
- }
|
|
- if (parse_range(value, &rargs->pstart, &rargs->pend)) {
|
|
- fprintf(stderr, "Invalid drange argument\n");
|
|
- return 1;
|
|
- }
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_DRANGE;
|
|
- } else if (!strcmp(this_char, "vrange")) {
|
|
- if (!value || !*value) {
|
|
- fprintf(stderr, "the vrange filter requires "
|
|
- "an argument\n");
|
|
- return 1;
|
|
- }
|
|
- if (parse_range(value, &rargs->vstart, &rargs->vend)) {
|
|
- fprintf(stderr, "Invalid vrange argument\n");
|
|
- return 1;
|
|
- }
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_VRANGE;
|
|
- } else if (!strcmp(this_char, "convert")) {
|
|
- if (!value || !*value) {
|
|
- fprintf(stderr, "the convert option requires "
|
|
- "an argument\n");
|
|
- return 1;
|
|
- }
|
|
- if (parse_one_profile(value, &rargs->target)) {
|
|
- fprintf(stderr, "Invalid convert argument\n");
|
|
- return 1;
|
|
- }
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_CONVERT;
|
|
- } else if (!strcmp(this_char, "soft")) {
|
|
- rargs->flags |= BTRFS_RESTRIPE_ARGS_SOFT;
|
|
- } else {
|
|
- fprintf(stderr, "Unrecognized restripe option '%s'\n",
|
|
- this_char);
|
|
- return 1;
|
|
- }
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static void dump_ioctl_restripe_args(struct btrfs_ioctl_restripe_args *args);
|
|
-
|
|
-static struct option restripe_longopts[] = {
|
|
- { "data", 2, NULL, 'd'},
|
|
- { "metadata", 2, NULL, 'm' },
|
|
- { "system", 2, NULL, 's' },
|
|
- { "force", 0, NULL, 'f' },
|
|
- { "verbose", 0, NULL, 'v' },
|
|
- { 0, 0, 0, 0}
|
|
-};
|
|
-
|
|
-/*
|
|
- * [-d [filters]] [-m [filters]] [-s [filters]] [-vf]
|
|
- */
|
|
-int do_restripe(int ac, char **av)
|
|
-{
|
|
- int fd;
|
|
- char *path;
|
|
- struct btrfs_ioctl_restripe_args args;
|
|
- struct btrfs_restripe_args *ptrs[] = { &args.data, &args.sys,
|
|
- &args.meta, NULL };
|
|
- int force = 0;
|
|
- int verbose = 0;
|
|
- int nofilters = 1;
|
|
- int i;
|
|
- int longindex;
|
|
- int ret;
|
|
- int e;
|
|
-
|
|
- memset(&args, 0, sizeof(args));
|
|
-
|
|
- while (1) {
|
|
- int opt = getopt_long(ac, av, "d::s::m::fv", restripe_longopts,
|
|
- &longindex);
|
|
- if (opt < 0)
|
|
- break;
|
|
-
|
|
- switch (opt) {
|
|
- case 'd':
|
|
- nofilters = 0;
|
|
- args.flags |= BTRFS_RESTRIPE_DATA;
|
|
-
|
|
- if (parse_filters(optarg, &args.data))
|
|
- return 1;
|
|
- break;
|
|
- case 's':
|
|
- nofilters = 0;
|
|
- args.flags |= BTRFS_RESTRIPE_SYSTEM;
|
|
-
|
|
- if (parse_filters(optarg, &args.sys))
|
|
- return 1;
|
|
- break;
|
|
- case 'm':
|
|
- nofilters = 0;
|
|
- args.flags |= BTRFS_RESTRIPE_METADATA;
|
|
-
|
|
- if (parse_filters(optarg, &args.meta))
|
|
- return 1;
|
|
- break;
|
|
- case 'f':
|
|
- force = 1;
|
|
- break;
|
|
- case 'v':
|
|
- verbose = 1;
|
|
- break;
|
|
- default:
|
|
- fprintf(stderr, "Invalid arguments for restripe\n");
|
|
- return 1;
|
|
- }
|
|
- }
|
|
-
|
|
- if (ac - optind != 1) {
|
|
- fprintf(stderr, "Invalid arguments for restripe\n");
|
|
- return 1;
|
|
- }
|
|
-
|
|
- if (nofilters) {
|
|
- /* relocate everything - no filters */
|
|
- args.flags |= BTRFS_RESTRIPE_TYPE_MASK;
|
|
- }
|
|
-
|
|
- /* drange makes sense only when devid is set */
|
|
- for (i = 0; ptrs[i]; i++) {
|
|
- if ((ptrs[i]->flags & BTRFS_RESTRIPE_ARGS_DRANGE) &&
|
|
- !(ptrs[i]->flags & BTRFS_RESTRIPE_ARGS_DEVID)) {
|
|
- fprintf(stderr, "drange filter can be used only if "
|
|
- "devid filter is used\n");
|
|
- return 1;
|
|
- }
|
|
- }
|
|
-
|
|
- /* soft makes sense only when convert for corresponding type is set */
|
|
- for (i = 0; ptrs[i]; i++) {
|
|
- if ((ptrs[i]->flags & BTRFS_RESTRIPE_ARGS_SOFT) &&
|
|
- !(ptrs[i]->flags & BTRFS_RESTRIPE_ARGS_CONVERT)) {
|
|
- fprintf(stderr, "'soft' option can be used only if "
|
|
- "changing profiles\n");
|
|
- return 1;
|
|
- }
|
|
- }
|
|
-
|
|
- path = av[optind];
|
|
- fd = open_file_or_dir(path);
|
|
- if (fd < 0) {
|
|
- fprintf(stderr, "ERROR: can't access to '%s'\n", path);
|
|
- return 12;
|
|
- }
|
|
-
|
|
- if (force)
|
|
- args.flags |= BTRFS_RESTRIPE_FORCE;
|
|
- if (verbose)
|
|
- dump_ioctl_restripe_args(&args);
|
|
-
|
|
- ret = ioctl(fd, BTRFS_IOC_RESTRIPE, &args);
|
|
- e = errno;
|
|
- close(fd);
|
|
-
|
|
- if (ret < 0) {
|
|
- if (e == ECANCELED) {
|
|
- fprintf(stderr, "restripe interrupted by user\n");
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: error during restriping '%s' "
|
|
- "- %s\n", path, strerror(e));
|
|
- return 19;
|
|
- }
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-int do_restripe_cancel(int ac, char **av)
|
|
-{
|
|
- int fd;
|
|
- char *path = av[1];
|
|
- int ret;
|
|
- int e;
|
|
-
|
|
- fd = open_file_or_dir(path);
|
|
- if (fd < 0) {
|
|
- fprintf(stderr, "ERROR: can't access to '%s'\n", path);
|
|
- return 12;
|
|
- }
|
|
-
|
|
- ret = ioctl(fd, BTRFS_IOC_RESTRIPE_CTL, BTRFS_RESTRIPE_CTL_CANCEL);
|
|
- e = errno;
|
|
- close(fd);
|
|
-
|
|
- if (ret < 0) {
|
|
- fprintf(stderr, "ERROR: restripe cancel on '%s' failed - %s\n",
|
|
- path, (e == ENOTCONN) ? "Not in progress" : strerror(e));
|
|
- return 19;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-int do_restripe_pause(int ac, char **av)
|
|
-{
|
|
- int fd;
|
|
- char *path = av[1];
|
|
- int ret;
|
|
- int e;
|
|
-
|
|
- fd = open_file_or_dir(path);
|
|
- if (fd < 0) {
|
|
- fprintf(stderr, "ERROR: can't access to '%s'\n", path);
|
|
- return 12;
|
|
- }
|
|
-
|
|
- ret = ioctl(fd, BTRFS_IOC_RESTRIPE_CTL, BTRFS_RESTRIPE_CTL_PAUSE);
|
|
- e = errno;
|
|
- close(fd);
|
|
-
|
|
- if (ret < 0) {
|
|
- fprintf(stderr, "ERROR: restripe pause on '%s' failed - %s\n",
|
|
- path, (e == ENOTCONN) ? "Not running" : strerror(e));
|
|
- return 19;
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-int do_restripe_resume(int ac, char **av)
|
|
-{
|
|
- int fd;
|
|
- char *path = av[1];
|
|
- int ret;
|
|
- int e;
|
|
-
|
|
- fd = open_file_or_dir(path);
|
|
- if (fd < 0) {
|
|
- fprintf(stderr, "ERROR: can't access to '%s'\n", path);
|
|
- return 12;
|
|
- }
|
|
-
|
|
- ret = ioctl(fd, BTRFS_IOC_RESTRIPE_CTL, BTRFS_RESTRIPE_CTL_RESUME);
|
|
- e = errno;
|
|
- close(fd);
|
|
-
|
|
- if (ret < 0) {
|
|
- if (e == ECANCELED) {
|
|
- fprintf(stderr, "restripe interrupted by user\n");
|
|
- } else if (e == ENOTCONN || e == EINPROGRESS) {
|
|
- fprintf(stderr, "ERROR: restripe resume on '%s' "
|
|
- "failed - %s\n", path,
|
|
- (e == ENOTCONN) ? "Not in progress" :
|
|
- "Already running");
|
|
- return 19;
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: error during restriping '%s' "
|
|
- "- %s\n", path, strerror(e));
|
|
- return 19;
|
|
- }
|
|
- }
|
|
-
|
|
- return 0;
|
|
-}
|
|
-
|
|
-static struct option restripe_progress_longopts[] = {
|
|
- { "verbose", 0, NULL, 'v' },
|
|
- { 0, 0, 0, 0}
|
|
-};
|
|
-
|
|
-int do_restripe_progress(int ac, char **av)
|
|
-{
|
|
- int fd;
|
|
- char *path;
|
|
- struct btrfs_ioctl_restripe_args args;
|
|
- int verbose = 0;
|
|
- int longindex;
|
|
- int ret;
|
|
- int e;
|
|
-
|
|
- while (1) {
|
|
- int opt = getopt_long(ac, av, "v", restripe_progress_longopts,
|
|
- &longindex);
|
|
- if (opt < 0)
|
|
- break;
|
|
-
|
|
- switch (opt) {
|
|
- case 'v':
|
|
- verbose = 1;
|
|
- break;
|
|
- default:
|
|
- fprintf(stderr, "Invalid arguments for restripe "
|
|
- "status\n");
|
|
- return 1;
|
|
- }
|
|
- }
|
|
-
|
|
- if (ac - optind != 1) {
|
|
- fprintf(stderr, "Invalid arguments for restripe status\n");
|
|
- return 1;
|
|
- }
|
|
-
|
|
- path = av[optind];
|
|
- fd = open_file_or_dir(path);
|
|
- if (fd < 0) {
|
|
- fprintf(stderr, "ERROR: can't access to '%s'\n", path);
|
|
- return 12;
|
|
- }
|
|
-
|
|
- ret = ioctl(fd, BTRFS_IOC_RESTRIPE_PROGRESS, &args);
|
|
- e = errno;
|
|
- close(fd);
|
|
+ fprintf(stderr, "ERROR: error during balancing '%s' - %s\n",
|
|
+ path, strerror(e));
|
|
|
|
- if (ret < 0) {
|
|
- fprintf(stderr, "ERROR: restripe status on '%s' failed - %s\n",
|
|
- path, (e == ENOTCONN) ? "Not in progress" : strerror(e));
|
|
return 19;
|
|
}
|
|
-
|
|
- if (args.state & BTRFS_RESTRIPE_ST_RUNNING) {
|
|
- printf("Restripe on '%s' is running", path);
|
|
- if (args.state & BTRFS_RESTRIPE_ST_CANCEL_REQ)
|
|
- printf(", cancel requested\n");
|
|
- else if (args.state & BTRFS_RESTRIPE_ST_PAUSE_REQ)
|
|
- printf(", pause requested\n");
|
|
- else
|
|
- printf("\n");
|
|
- } else {
|
|
- printf("Restripe on '%s' is paused\n", path);
|
|
- }
|
|
-
|
|
- printf("%llu out of about %llu chunks restriped (%llu considered), "
|
|
- "%3.f%% left\n", args.stat.completed, args.stat.expected,
|
|
- args.stat.considered,
|
|
- 100 * (1 - (float)args.stat.completed/args.stat.expected));
|
|
-
|
|
- if (verbose)
|
|
- dump_ioctl_restripe_args(&args);
|
|
-
|
|
return 0;
|
|
}
|
|
|
|
-static void dump_restripe_args(struct btrfs_restripe_args *args)
|
|
-{
|
|
- if (args->flags & BTRFS_RESTRIPE_ARGS_CONVERT) {
|
|
- printf("converting, target=%llu, soft is %s", args->target,
|
|
- (args->flags & BTRFS_RESTRIPE_ARGS_SOFT) ? "on" : "off");
|
|
- } else {
|
|
- printf("balancing");
|
|
- }
|
|
-
|
|
- if (args->flags & BTRFS_RESTRIPE_ARGS_PROFILES)
|
|
- printf(", profiles=%llu", args->profiles);
|
|
- if (args->flags & BTRFS_RESTRIPE_ARGS_USAGE)
|
|
- printf(", usage=%llu", args->usage);
|
|
- if (args->flags & BTRFS_RESTRIPE_ARGS_DEVID)
|
|
- printf(", devid=%llu", args->devid);
|
|
- if (args->flags & BTRFS_RESTRIPE_ARGS_DRANGE)
|
|
- printf(", drange=%llu..%llu", args->pstart, args->pend);
|
|
- if (args->flags & BTRFS_RESTRIPE_ARGS_VRANGE)
|
|
- printf(", vrange=%llu..%llu", args->vstart, args->vend);
|
|
-
|
|
- printf("\n");
|
|
-}
|
|
-
|
|
-static void dump_ioctl_restripe_args(struct btrfs_ioctl_restripe_args *args)
|
|
-{
|
|
- printf("Dumping filters: flags 0x%llx, state 0x%llx, force is %s\n",
|
|
- args->flags, args->state,
|
|
- (args->flags & BTRFS_RESTRIPE_FORCE) ? "on" : "off");
|
|
- if (args->flags & BTRFS_RESTRIPE_DATA) {
|
|
- printf(" DATA (flags 0x%llx): ", args->data.flags);
|
|
- dump_restripe_args(&args->data);
|
|
- }
|
|
- if (args->flags & BTRFS_RESTRIPE_METADATA) {
|
|
- printf(" METADATA (flags 0x%llx): ", args->meta.flags);
|
|
- dump_restripe_args(&args->meta);
|
|
- }
|
|
- if (args->flags & BTRFS_RESTRIPE_SYSTEM) {
|
|
- printf(" SYSTEM (flags 0x%llx): ", args->sys.flags);
|
|
- dump_restripe_args(&args->sys);
|
|
- }
|
|
-}
|
|
|
|
|
|
/**** man: btrfs device delete
|
|
diff --git a/btrfs_cmds.h b/btrfs_cmds.h
|
|
index 2cd0ac1..81182b1 100644
|
|
--- a/btrfs_cmds.h
|
|
+++ b/btrfs_cmds.h
|
|
@@ -27,11 +27,6 @@ int do_scrub_start(int nargs, char **argv);
|
|
int do_scrub_status(int argc, char **argv);
|
|
int do_scrub_resume(int argc, char **argv);
|
|
int do_scrub_cancel(int nargs, char **argv);
|
|
-int do_restripe(int ac, char **av);
|
|
-int do_restripe_cancel(int ac, char **av);
|
|
-int do_restripe_pause(int ac, char **av);
|
|
-int do_restripe_resume(int ac, char **av);
|
|
-int do_restripe_progress(int ac, char **av);
|
|
int do_remove_volume(int nargs, char **args);
|
|
int do_scan(int nargs, char **argv);
|
|
int do_resize(int nargs, char **argv);
|
|
diff --git a/ctree.h b/ctree.h
|
|
index 58ea3d3..54748c8 100644
|
|
--- a/ctree.h
|
|
+++ b/ctree.h
|
|
@@ -61,9 +61,6 @@ struct btrfs_trans_handle;
|
|
#define BTRFS_CSUM_TREE_OBJECTID 7ULL
|
|
|
|
|
|
-/* for storing restripe params in the root tree */
|
|
-#define BTRFS_RESTRIPE_OBJECTID -4ULL
|
|
-
|
|
/* oprhan objectid for tracking unlinked/truncated files */
|
|
#define BTRFS_ORPHAN_OBJECTID -5ULL
|
|
|
|
@@ -708,12 +705,6 @@ struct btrfs_csum_item {
|
|
#define BTRFS_BLOCK_GROUP_DUP (1 << 5)
|
|
#define BTRFS_BLOCK_GROUP_RAID10 (1 << 6)
|
|
|
|
-/*
|
|
- * to avoid troubles..
|
|
- */
|
|
-#define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1 << 7)
|
|
-#define BTRFS_BLOCK_GROUP_RESERVED (1 << 7)
|
|
-
|
|
struct btrfs_block_group_item {
|
|
__le64 used;
|
|
__le64 chunk_objectid;
|
|
diff --git a/ioctl.h b/ioctl.h
|
|
index af8b18b..1ae7537 100644
|
|
--- a/ioctl.h
|
|
+++ b/ioctl.h
|
|
@@ -91,45 +91,6 @@ struct btrfs_ioctl_fs_info_args {
|
|
__u64 reserved[124]; /* pad to 1k */
|
|
};
|
|
|
|
-#define BTRFS_RESTRIPE_CTL_CANCEL 1
|
|
-#define BTRFS_RESTRIPE_CTL_PAUSE 2
|
|
-#define BTRFS_RESTRIPE_CTL_RESUME 3
|
|
-
|
|
-struct btrfs_restripe_args {
|
|
- __u64 profiles;
|
|
- __u64 usage;
|
|
- __u64 devid;
|
|
- __u64 pstart;
|
|
- __u64 pend;
|
|
- __u64 vstart;
|
|
- __u64 vend;
|
|
-
|
|
- __u64 target;
|
|
-
|
|
- __u64 flags;
|
|
-
|
|
- __u64 unused[8];
|
|
-} __attribute__ ((__packed__));
|
|
-
|
|
-struct btrfs_restripe_progress {
|
|
- __u64 expected;
|
|
- __u64 considered;
|
|
- __u64 completed;
|
|
-};
|
|
-
|
|
-struct btrfs_ioctl_restripe_args {
|
|
- __u64 flags;
|
|
- __u64 state;
|
|
-
|
|
- struct btrfs_restripe_args data;
|
|
- struct btrfs_restripe_args sys;
|
|
- struct btrfs_restripe_args meta;
|
|
-
|
|
- struct btrfs_restripe_progress stat;
|
|
-
|
|
- __u64 unused[72]; /* pad to 1k */
|
|
-};
|
|
-
|
|
struct btrfs_ioctl_search_key {
|
|
/* which root are we searching. 0 is the tree of tree roots */
|
|
__u64 tree_id;
|
|
@@ -311,15 +272,10 @@ struct btrfs_ioctl_logical_ino_args {
|
|
#define BTRFS_IOC_DEV_INFO _IOWR(BTRFS_IOCTL_MAGIC, 30, \
|
|
struct btrfs_ioctl_dev_info_args)
|
|
#define BTRFS_IOC_FS_INFO _IOR(BTRFS_IOCTL_MAGIC, 31, \
|
|
- struct btrfs_ioctl_fs_info_args)
|
|
+ struct btrfs_ioctl_fs_info_args)
|
|
#define BTRFS_IOC_INO_PATHS _IOWR(BTRFS_IOCTL_MAGIC, 35, \
|
|
struct btrfs_ioctl_ino_path_args)
|
|
#define BTRFS_IOC_LOGICAL_INO _IOWR(BTRFS_IOCTL_MAGIC, 36, \
|
|
struct btrfs_ioctl_ino_path_args)
|
|
|
|
-#define BTRFS_IOC_RESTRIPE _IOW(BTRFS_IOCTL_MAGIC, 32, \
|
|
- struct btrfs_ioctl_restripe_args)
|
|
-#define BTRFS_IOC_RESTRIPE_CTL _IOW(BTRFS_IOCTL_MAGIC, 33, int)
|
|
-#define BTRFS_IOC_RESTRIPE_PROGRESS _IOR(BTRFS_IOCTL_MAGIC, 34, \
|
|
- struct btrfs_ioctl_restripe_args)
|
|
#endif
|
|
diff --git a/print-tree.c b/print-tree.c
|
|
index 49f98af..6039699 100644
|
|
--- a/print-tree.c
|
|
+++ b/print-tree.c
|
|
@@ -391,9 +391,6 @@ static void print_objectid(unsigned long long objectid, u8 type)
|
|
case BTRFS_CSUM_TREE_OBJECTID:
|
|
printf("CSUM_TREE");
|
|
break;
|
|
- case BTRFS_RESTRIPE_OBJECTID:
|
|
- printf("RESTRIPE");
|
|
- break;
|
|
case BTRFS_ORPHAN_OBJECTID:
|
|
printf("ORPHAN");
|
|
break;
|
|
diff --git a/volumes.h b/volumes.h
|
|
index 5845c1d..08c53e4 100644
|
|
--- a/volumes.h
|
|
+++ b/volumes.h
|
|
@@ -95,48 +95,6 @@ struct btrfs_multi_bio {
|
|
#define btrfs_multi_bio_size(n) (sizeof(struct btrfs_multi_bio) + \
|
|
(sizeof(struct btrfs_bio_stripe) * (n)))
|
|
|
|
-/*
|
|
- * Restriper's general "type" filter. Shares bits with chunk type for
|
|
- * simplicity, RESTRIPE prefix is used to avoid confusion.
|
|
- */
|
|
-#define BTRFS_RESTRIPE_DATA (1ULL << 0)
|
|
-#define BTRFS_RESTRIPE_SYSTEM (1ULL << 1)
|
|
-#define BTRFS_RESTRIPE_METADATA (1ULL << 2)
|
|
-
|
|
-#define BTRFS_RESTRIPE_TYPE_MASK (BTRFS_RESTRIPE_DATA | \
|
|
- BTRFS_RESTRIPE_SYSTEM | \
|
|
- BTRFS_RESTRIPE_METADATA)
|
|
-
|
|
-#define BTRFS_RESTRIPE_FORCE (1ULL << 3)
|
|
-
|
|
-/*
|
|
- * Restripe filters
|
|
- */
|
|
-#define BTRFS_RESTRIPE_ARGS_PROFILES (1ULL << 0)
|
|
-#define BTRFS_RESTRIPE_ARGS_USAGE (1ULL << 1)
|
|
-#define BTRFS_RESTRIPE_ARGS_DEVID (1ULL << 2)
|
|
-#define BTRFS_RESTRIPE_ARGS_DRANGE (1ULL << 3)
|
|
-#define BTRFS_RESTRIPE_ARGS_VRANGE (1ULL << 4)
|
|
-
|
|
-/*
|
|
- * Profile changing flags. When SOFT is set we won't relocate chunk if
|
|
- * it already has the target profile (even though it may be
|
|
- * half-filled).
|
|
- */
|
|
-#define BTRFS_RESTRIPE_ARGS_CONVERT (1ULL << 8)
|
|
-#define BTRFS_RESTRIPE_ARGS_SOFT (1ULL << 9)
|
|
-
|
|
-/*
|
|
- * Restripe state bits
|
|
- */
|
|
-#define RESTRIPE_RUNNING 0
|
|
-#define RESTRIPE_CANCEL_REQ 1
|
|
-#define RESTRIPE_PAUSE_REQ 2
|
|
-
|
|
-#define BTRFS_RESTRIPE_ST_RUNNING (1ULL << RESTRIPE_RUNNING)
|
|
-#define BTRFS_RESTRIPE_ST_CANCEL_REQ (1ULL << RESTRIPE_CANCEL_REQ)
|
|
-#define BTRFS_RESTRIPE_ST_PAUSE_REQ (1ULL << RESTRIPE_PAUSE_REQ)
|
|
-
|
|
int btrfs_alloc_dev_extent(struct btrfs_trans_handle *trans,
|
|
struct btrfs_device *device,
|
|
u64 chunk_tree, u64 chunk_objectid,
|
|
--
|
|
1.7.6.233.gd79bc
|
|
|